krb5_principal principal = NULL;
char * pname = NULL;
krb5_error_code code;
- char local_cell[MAXCELLCHARS+1];
+ char local_cell[CELL_MAXNAMELEN+1];
char **cells = NULL;
int cell_count=0;
struct afsconf_cell cellconfig;
int cell_count;
char ** cells=NULL;
const char * realm = NULL;
- char local_cell[MAXCELLCHARS+1]="";
+ char local_cell[CELL_MAXNAMELEN+1]="";
struct afsconf_cell cellconfig;
if (!pkrb5_init_context)
krb5_ccache cc = 0;
const char * realm = NULL;
struct afsconf_cell cellconfig;
- char local_cell[MAXCELLCHARS+1];
+ char local_cell[CELL_MAXNAMELEN+1];
while ( count-- ) {
code = pkrb5_parse_name(ctx, principals[count], &princ);
struct ktc_principal *aserver,
struct ktc_token *atoken)
{
- static char lastcell[MAXCELLCHARS+1] = { 0 };
+ static char lastcell[CELL_MAXNAMELEN+1] = { 0 };
static char confdir[512] = { 0 };
#ifdef AFS_ID_TO_NAME
char username_copy[BUFSIZ];
struct ktc_principal aclient;
char realm_of_user[REALM_SZ]; /* Kerberos realm of user */
char realm_of_cell[REALM_SZ]; /* Kerberos realm of cell */
- char local_cell[MAXCELLCHARS+1];
- char Dmycell[MAXCELLCHARS+1];
+ char local_cell[CELL_MAXNAMELEN+1];
+ char Dmycell[CELL_MAXNAMELEN+1];
struct ktc_token atoken;
struct ktc_token btoken;
struct afsconf_cell ak_cellconfig; /* General information about the cell */
KFW_AFS_get_cellconfig(char *cell, struct afsconf_cell *cellconfig, char *local_cell)
{
int rc;
- char newcell[MAXCELLCHARS+1];
+ char newcell[CELL_MAXNAMELEN+1];
local_cell[0] = (char)0;
memset(cellconfig, 0, sizeof(*cellconfig));
#include <cm_config.h>
#include <rxkad.h>
-#define MAXCELLCHARS 64
+#define CELL_MAXNAMELEN 256
#define MAXHOSTCHARS 64
#define MAXHOSTSPERCELL 8
#define TRANSARCAFSDAEMON "TransarcAFSDaemon"
{
cm_cell_t *cp, *cp2;
long code;
- char fullname[200]="";
+ char fullname[CELL_MAXNAMELEN]="";
int hasWriteLock = 0;
afs_uint32 hash;
cm_cell_rock_t rock;
if (!cp) {
for (cp = cm_data.allCellsp; cp; cp=cp->allNextp) {
if (strnicmp(namep, cp->name, strlen(namep)) == 0) {
- strcpy(fullname, cp->name);
+ strncpy(fullname, cp->name, CELL_MAXNAMELEN);
+ fullname[CELL_MAXNAMELEN-1] = '\0';
break;
}
}
*/
for (cp = cm_data.cellNameHashTablep[hash]; cp; cp=cp->nameNextp) {
if (cm_stricmp_utf8(namep, cp->name) == 0) {
- strcpy(fullname, cp->name);
+ strncpy(fullname, cp->name, CELL_MAXNAMELEN);
+ fullname[CELL_MAXNAMELEN-1] = '\0';
break;
}
}
for (cp = cm_data.allCellsp; cp; cp=cp->allNextp) {
if (strnicmp(namep, cp->name, strlen(namep)) == 0) {
- strcpy(fullname, cp->name);
+ strncpy(fullname, cp->name, CELL_MAXNAMELEN);
+ fullname[CELL_MAXNAMELEN-1] = '\0';
break;
}
}
lock_ReleaseWrite(&cm_cellLock);
/* fullname is not valid if cp == NULL */
- if (cp && newnamep)
- strcpy(newnamep, fullname);
-
+ if (cp && newnamep) {
+ strncpy(newnamep, fullname, CELL_MAXNAMELEN);
+ newnamep[CELL_MAXNAMELEN-1]='\0';
+ }
return cp;
}
/* copy in name */
strncpy(cellp->name, "Freelance.Local.Cell", CELL_MAXNAMELEN); /*safe*/
+ cellp->name[CELL_MAXNAMELEN-1] = '\0';
/* thread on global list */
cellp->allNextp = cm_data.allCellsp;
* If the caller wants the "real" cell name, it puts a non-null pointer in
* newCellNamep. Anomaly: if cellNamep is ambiguous, we may modify
* newCellNamep but return an error code.
+ *
+ * newCellNamep is required to be CELL_MAXNAMELEN+1 in size.
*/
long cm_SearchCellFile(char *cellNamep, char *newCellNamep,
cm_configProc_t *procp, void *rockp)
{
- char wdir[257];
+ char wdir[MAX_PATH]="";
FILE *tfilep = NULL, *bestp, *tempp;
char *tp;
char lineBuffer[257];
return -3;
cm_GetCellServDB(wdir, sizeof(wdir));
- tfilep = fopen(wdir, "r");
+ if (*wdir)
+ tfilep = fopen(wdir, "r");
if (!tfilep)
return -2;
tp = fgets(lineBuffer, sizeof(lineBuffer), tfilep);
if (tracking)
(void) fgets(lineBuffer, sizeof(lineBuffer), bestp);
- if ( tp == NULL) {
+ if (tp == NULL) {
if (feof(tfilep)) {
/* hit EOF */
if (partial) {
if (stricmp(lineBuffer+1, cellNamep) == 0) {
/* found the cell we're looking for */
if (newCellNamep) {
- strcpy(newCellNamep, lineBuffer+1);
+ strncpy(newCellNamep, lineBuffer+1,CELL_MAXNAMELEN+1);
+ newCellNamep[CELL_MAXNAMELEN] = '\0';
strlwr(newCellNamep);
}
inRightCell = 1;
return -5;
}
if (newCellNamep) {
- strcpy(newCellNamep, lineBuffer+1);
+ strncpy(newCellNamep, lineBuffer+1,CELL_MAXNAMELEN+1);
+ newCellNamep[CELL_MAXNAMELEN] = '\0';
strlwr(newCellNamep);
}
inRightCell = 0;
return (foundCell) ? 0 : -11;
}
+/* newCellNamep is required to be CELL_MAXNAMELEN+1 in size */
long cm_SearchCellByDNS(char *cellNamep, char *newCellNamep, int *ttl,
cm_configProc_t *procp, void *rockp)
{
if (procp)
(*procp)(rockp, &vlSockAddr, cellHostNames[i]);
if (newCellNamep) {
- strcpy(newCellNamep,cellNamep);
+ strncpy(newCellNamep,cellNamep,CELL_MAXNAMELEN+1);
+ newCellNamep[CELL_MAXNAMELEN] = '\0';
strlwr(newCellNamep);
}
}
*/
long cm_GetCellServDB(char *cellNamep, afs_uint32 len)
{
- int tlen;
+ size_t tlen;
cm_GetConfigDir(cellNamep, len);
/* add trailing backslash, if required */
tlen = (int)strlen(cellNamep);
- if (cellNamep[tlen-1] != '\\') {
- strncat(cellNamep, "\\", len);
+ if (tlen) {
+ if (cellNamep[tlen-1] != '\\') {
+ strncat(cellNamep, "\\", len);
+ cellNamep[len-1] = '\0';
+ }
+
+ strncat(cellNamep, AFS_CELLSERVDB, len);
cellNamep[len-1] = '\0';
}
-
- strncat(cellNamep, AFS_CELLSERVDB, len);
- cellNamep[len-1] = '\0';
return 0;
}
cm_configFile_t *cm_CommonOpen(char *namep, char *rwp)
{
- char wdir[256];
- FILE *tfilep;
+ char wdir[MAX_PATH]="";
+ FILE *tfilep = NULL;
cm_GetConfigDir(wdir, sizeof(wdir));
-
- strncat(wdir, namep, sizeof(wdir));
- wdir[sizeof(wdir)-1] = '\0';
+ if (*wdir) {
+ strncat(wdir, namep, sizeof(wdir));
+ wdir[sizeof(wdir)-1] = '\0';
- tfilep = fopen(wdir, rwp);
-
+ tfilep = fopen(wdir, rwp);
+ }
return ((cm_configFile_t *) tfilep);
}
long cm_CloseCellFile(cm_configFile_t *filep)
{
- char wdir[260];
- char sdir[260];
+ char wdir[MAX_PATH];
+ char sdir[MAX_PATH];
long code;
long closeCode;
closeCode = fclose((FILE *)filep);
fprintf(stderr, "processRep_AFSDB: resolved name %s to addr %x\n", hostName, addr);
#endif /* DEBUG */
memcpy(&cellHostAddrs[srvCount], &addr.s_addr, sizeof(addr.s_addr));
- strncpy(cellHostNames[srvCount], hostName, MAXCELLCHARS);
- cellHostNames[srvCount][MAXCELLCHARS-1] = '\0';
+ strncpy(cellHostNames[srvCount], hostName, CELL_MAXNAMELEN);
+ cellHostNames[srvCount][CELL_MAXNAMELEN-1] = '\0';
srvCount++;
}
else {
cm_attr_t tattr;
clientchar_t *cp;
fschar_t mpInfo[512]; /* mount point string */
- fschar_t fullCell[MAXCELLCHARS];
+ fschar_t fullCell[CELL_MAXNAMELEN];
fschar_t *fscell = NULL;
fschar_t *fsvolume = NULL;
clientchar_t volume[VL_MAXNAMELEN];
#define MAXSIZE 2048
#define MAXINSIZE 1300 /* pioctl complains if data is larger than this */
#define VMSGSIZE 128 /* size of msg buf in volume hdr */
-#define MAXCELLCHARS 64
+#define CELL_MAXNAMELEN 256
#define MAXHOSTCHARS 64
static char space[MAXSIZE];
struct ViceIoctl blob;
blob.in_size = 0;
- blob.out_size = MAXCELLCHARS;
+ blob.out_size = CELL_MAXNAMELEN;
blob.out = cellname;
code = pioctl_utf8(fname, VIOC_FILE_CELL_NAME, &blob, 1);
{
afs_int32 tc, code, id;
char *nm;
- char cell[MAXCELLCHARS];
+ char cell[CELL_MAXNAMELEN];
char confDir[257];
for ( nm = aname; tc = *nm; nm++) {
cm_fid_t fid;
afs_uint32 filetype;
afs_uint32 owner[2];
- char cell[MAXCELLCHARS];
+ char cell[CELL_MAXNAMELEN];
/* once per file */
memset(&fid, 0, sizeof(fid));
code = pioctl_utf8(ti->data, VIOC_GETFILETYPE, &blob, 1);
- blob.out_size = MAXCELLCHARS;
+ blob.out_size = CELL_MAXNAMELEN;
blob.out = cell;
code = pioctl_utf8(ti->data, VIOC_FILE_CELL_NAME, &blob, 1);
for(ti=as->parms[0].items; ti; ti=ti->next) {
cm_fid_t fid;
afs_uint32 filetype;
- char cell[MAXCELLCHARS];
+ char cell[CELL_MAXNAMELEN];
/* once per file */
memset(&fid, 0, sizeof(fid));
code = pioctl_utf8(ti->data, VIOC_GETFILETYPE, &blob, 1);
- blob.out_size = MAXCELLCHARS;
+ blob.out_size = CELL_MAXNAMELEN;
blob.out = cell;
code = pioctl_utf8(ti->data, VIOC_FILE_CELL_NAME, &blob, 1);