struct ktc_principal server;
struct ktc_principal client;
struct ktc_token token;
-} local_tokens[MAXLOCALTOKENS] = { {
-0}, {
-0}, {
-0}, {
-0}};
+} local_tokens[MAXLOCALTOKENS];
static int
GetToken(struct ktc_principal *aserver, struct ktc_token *atoken,
memset(&server, 0, sizeof(server));
strcpy(server.name, "afs");
- strcpy(server.cell, token->cell);
+ if (strlcpy(server.cell, token->cell, sizeof(server.cell))
+ >= sizeof(server.cell)) {
+ free(rxkadToken);
+ return KTC_INVAL;
+ }
code = ktc_SetToken(&server, rxkadToken, &client, flags);
free(rxkadToken);
return code;
memset(ktcToken, 0, sizeof(struct ktc_token));
strcpy(server.name, "afs");
- strcpy(server.cell, cellName);
+
+ if (cellName != NULL)
+ strcpy(server.cell, cellName);
+
code = GetToken(&server, ktcToken, sizeof(struct ktc_token),
NULL /*client*/, &viceid);
if (code == 0) {
if (aclient || aviceid) {
if (aclient) {
- strcpy(aclient->cell, cellp);
+ strlcpy(aclient->cell, cellp, sizeof(aclient->cell));
aclient->instance[0] = 0;
}
tp += temp; /* skip clear token itself */
tp += sizeof(afs_int32); /* skip primary flag */
/* tp now points to the cell name */
- strcpy(aserver->cell, tp);
+ strlcpy(aserver->cell, tp, sizeof(aserver->cell));
aserver->instance[0] = 0;
strcpy(aserver->name, "afs");
#endif /* NO_AFS_CLIENT */
for (senv = environ, numenv = 0; *senv; senv++)
numenv++;
- newenv = (char **)malloc((numenv + 2) * sizeof(char *));
+ newenv = malloc((numenv + 2) * sizeof(char *));
for (senv = environ, denv = newenv; *senv; senv++) {
if (strncmp(*senv, "KRBTKFILE=", 10) != 0 &&