ktc: fix up initializer for local_tokens
[openafs.git] / src / auth / ktc.c
index 7307111..002f53b 100644 (file)
@@ -145,11 +145,7 @@ static struct {
     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,
@@ -356,7 +352,11 @@ ktc_SetTokenEx(struct ktc_setTokenData *token) {
 
        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;
@@ -487,7 +487,10 @@ ktc_GetTokenEx(char *cellName, struct ktc_setTokenData **tokenSet) {
        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) {
@@ -698,7 +701,7 @@ GetToken(struct ktc_principal *aserver, struct ktc_token *atoken,
 
                if (aclient || aviceid) {
                    if (aclient) {
-                       strcpy(aclient->cell, cellp);
+                       strlcpy(aclient->cell, cellp, sizeof(aclient->cell));
                        aclient->instance[0] = 0;
                    }
 
@@ -966,7 +969,7 @@ ktc_ListTokens(int aprevIndex,
     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 */
@@ -1820,7 +1823,7 @@ extern char **environ;
 
     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 &&