/*
* Copyright 2000, International Business Machines Corporation and others.
* All Rights Reserved.
- *
+ *
* This software has been released under the terms of the IBM Public
* License. For details, see the LICENSE file in the top-level source
* directory or online at http://www.openafs.org/dl/license10.html
#include <afsconfig.h>
#include <afs/param.h>
-RCSID
- ("$Header$");
+#include <afs/procmgmt.h>
+#include <roken.h>
#include <afs/stds.h>
#ifdef AFS_AIX32_ENV
#include <WINNT/afsevent.h>
#include <fcntl.h>
#include <io.h>
-#include <afs/dirent.h>
#include <afs/procmgmt.h>
#else
#include <netdb.h>
#include <netinet/in.h>
#include <sys/file.h>
-#include <dirent.h>
#endif
-#ifdef HAVE_STRING_H
+#include <dirent.h>
#include <string.h>
-#else
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <afs/cellconfig.h>
#include <afs/afsutil.h>
#include <afs/fileutil.h>
+#include <afs/com_err.h>
#ifdef AFS_AIX_ENV
#include <sys/statfs.h>
#endif
#include "update.h"
#include "global.h"
-extern int UPDATE_ExecuteRequest();
-
static int AddObject(char **expPath, char *dir);
static int PathInDirectory(char *dir, char *path);
+int update_SendFile(int, struct rx_call *, struct stat *);
+int update_SendDirInfo(char *, struct rx_call *, struct stat *,
+ char *origDir);
struct afsconf_dir *cdir;
int nDirs;
int dirLevel[MAXENTRIES];
char *whoami;
-static int Quit();
+static int Quit(char *);
int rxBind = 0;
}
int
-osi_audit()
+osi_audit(void)
{
/* this sucks but it works for now.
*/
int
main(int argc, char *argv[])
{
- struct rx_securityClass *securityObjects[3];
+ struct rx_securityClass **securityClasses;
+ afs_int32 numClasses;
struct rx_service *service;
afs_uint32 host = htonl(INADDR_ANY);
#ifdef AFS_AIX32_ENV
/*
- * The following signal action for AIX is necessary so that in case of a
- * crash (i.e. core is generated) we can include the user's data section
+ * The following signal action for AIX is necessary so that in case of a
+ * crash (i.e. core is generated) we can include the user's data section
* in the core dump. Unfortunately, by default, only a partial core is
* generated which, in many cases, isn't too useful.
*/
if (rxBind) {
afs_int32 ccode;
-#ifndef AFS_NT40_ENV
- if (AFSDIR_SERVER_NETRESTRICT_FILEPATH ||
+ if (AFSDIR_SERVER_NETRESTRICT_FILEPATH ||
AFSDIR_SERVER_NETINFO_FILEPATH) {
char reason[1024];
ccode = parseNetFiles(SHostAddrs, NULL, NULL,
ADDRSPERSITE, reason,
AFSDIR_SERVER_NETINFO_FILEPATH,
AFSDIR_SERVER_NETRESTRICT_FILEPATH);
- } else
-#endif
+ } else
{
ccode = rx_getAllAddr(SHostAddrs, ADDRSPERSITE);
}
- if (ccode == 1)
+ if (ccode == 1)
host = SHostAddrs[0];
}
if (rx_InitHost(host, htons(AFSCONF_UPDATEPORT)) < 0)
Quit("rx_init");
- /* Create a single security object, in this case the null security object,
- * for unauthenticated connections, which will be used to control security
- * on connections made to this server. */
-
- /* WHAT A JOKE! Let's use rxkad at least so we know who we're talking to,
- * then sometimes require full encryption. */
-
- /* rxnull and rxvab are no longer supported */
- securityObjects[0] = rxnull_NewServerSecurityObject();
-
- securityObjects[1] = (struct rx_securityClass *)0;
+ afsconf_BuildServerSecurityObjects(cdir, &securityClasses, &numClasses);
- securityObjects[2] =
- rxkad_NewServerSecurityObject(rxkad_clear, cdir, afsconf_GetKey, 0);
- if (securityObjects[2] == (struct rx_securityClass *)0)
+ if (securityClasses[2] == NULL)
Quit("rxkad_NewServerSecurityObject");
/* Instantiate a single UPDATE service. The rxgen-generated procedure
* which is called to decode requests is passed in here
* (UPDATE_ExecuteRequest). */
service =
- rx_NewServiceHost(host, 0, UPDATE_SERVICEID, "UPDATE", securityObjects,
- 3, UPDATE_ExecuteRequest);
+ rx_NewServiceHost(host, 0, UPDATE_SERVICEID, "UPDATE", securityClasses,
+ numClasses, UPDATE_ExecuteRequest);
if (service == (struct rx_service *)0)
Quit("rx_NewService");
rx_SetMaxProcs(service, 2);
/* construct a local path from a canonical (wire-format) path */
if ((error = ConstructLocalPath(name, "/", &reqObject))) {
- com_err(whoami, error, "Unable to construct local path");
+ afs_com_err(whoami, error, "Unable to construct local path");
return UPDATE_ERROR;
}
/* construct a local path from a canonical (wire-format) path */
if ((error = ConstructLocalPath(name, "/", &reqObject))) {
- com_err(whoami, error, "Unable to construct local path");
+ afs_com_err(whoami, error, "Unable to construct local path");
return UPDATE_ERROR;
}
}
static int
-Quit(msg, a, b)
- char *msg;
+Quit(char *msg)
{
- fprintf(stderr, msg, a, b);
+ fprintf(stderr, "%s", msg);
exit(1);
}
int
-update_SendFile(register int fd, register struct rx_call *call, register struct stat *status)
+update_SendFile(int fd, struct rx_call *call, struct stat *status)
{
char *buffer = (char *)0;
int blockSize;
return UPDATE_ERROR;
}
tlen = htonl(length);
- rx_Write(call, &tlen, sizeof(afs_int32)); /* send length on fetch */
+ rx_Write(call, (char *)&tlen, sizeof(afs_int32)); /* send length on fetch */
while (!error && length) {
- register int nbytes = (length > blockSize ? blockSize : length);
+ int nbytes = (length > blockSize ? blockSize : length);
nbytes = read(fd, buffer, nbytes);
if (nbytes <= 0) {
fprintf(stderr, "File system read failed\n");
return error;
}
-/* Enumerate dir (name) and write dir entry info into temp file.
+/* Enumerate dir (name) and write dir entry info into temp file.
*/
int
update_SendDirInfo(char *name, /* Name of dir to enumerate */
- register struct rx_call *call, /* rx call */
- register struct stat *status, /* stat struct for dir */
+ struct rx_call *call, /* rx call */
+ struct stat *status, /* stat struct for dir */
char *origDir) /* orig name of dir before being localized */
{
DIR *dirp;
struct dirent *dp;
FILE *stream;
struct stat tstatus;
- char filename[MAXSIZE], dirInfoFile[MAXSIZE];
+ char filename[MAXFNSIZE], dirInfoFile[MAXFNSIZE];
int fd, tfd, errcode, error, err;
error = 0;
goto fail;
}
if ((tstatus.st_mode & S_IFMT) != S_IFDIR) { /* not a directory */
- char dirEntry[MAXSIZE];
+ char dirEntry[MAXFNSIZE];
strcpy(dirEntry, origDir);
strcat(dirEntry, "/");
/* AddObject() - Adds the object to the list of exported objects after
* converting to a local path.
*
- * expPath : points to allocated storage in which the exportable path is
+ * expPath : points to allocated storage in which the exportable path is
* passed back.
- * dir : dir name passed in for export
+ * dir : dir name passed in for export
*
*/
static int
/* construct a local path from a canonical (wire-format) path */
if ((error = ConstructLocalPath(dir, "/", expPath))) {
- com_err(whoami, error, "Unable to construct local path");
+ afs_com_err(whoami, error, "Unable to construct local path");
return error;
}
/* stat the object */
error = stat(*expPath, &statbuf);
if (error) {
- com_err(whoami, error, ";Can't stat object.");
+ afs_com_err(whoami, error, ";Can't stat object.");
return error;
}
/* now check if the object has an exportable (file/dir) type */