$OpenBSD: patch-src_cfservd_c,v 1.4 2005/10/27 21:47:28 sturm Exp $
--- src/cfservd.c.orig	Thu Sep 22 15:57:18 2005
+++ src/cfservd.c	Fri Oct 21 16:35:55 2005
@@ -171,10 +171,10 @@ void CheckOptsAndInit(int argc,char **ar
   int c;
 
 SetContext("server");
-sprintf(VPREFIX, "cfservd");
+(void)snprintf(VPREFIX, 40, "cfservd");
 CfOpenLog();
-strcpy(VINPUTFILE,CFD_INPUT);
-strcpy(CFLOCK,"cfservd");
+(void)strlcpy(VINPUTFILE,CFD_INPUT,CF_BUFSIZE);
+(void)strlcpy(CFLOCK,"cfservd",sizeof(CFLOCK));
 OUTPUT[0] = '\0';
 
 /*
@@ -272,15 +272,15 @@ if ((CFSTARTTIME = time((time_t *)NULL))
 
  /* XXX Initialize workdir for non privileged users */
 
- strcpy(CFWORKDIR,WORKDIR);
+ (void)strlcpy(CFWORKDIR,WORKDIR,sizeof(CFWORKDIR));
 
  if (getuid() > 0)
     {
     char *homedir;
     if ((homedir = getenv("HOME")) != NULL)
        {
-       strcpy(CFWORKDIR,homedir);
-       strcat(CFWORKDIR,"/.cfagent");
+       (void)strlcpy(CFWORKDIR,homedir,sizeof(CFWORKDIR));
+       (void)strlcat(CFWORKDIR,"/.cfagent",sizeof(CFWORKDIR));
        }
     }
 
@@ -293,7 +293,7 @@ strncpy(VLOCKDIR,CFWORKDIR,CF_BUFSIZE-1)
 VIFELAPSED = CF_EXEC_IFELAPSED;
 VEXPIREAFTER = CF_EXEC_EXPIREAFTER;
  
-strcpy(VDOMAIN,"undefined.domain");
+(void)strlcpy(VDOMAIN,"undefined.domain",sizeof(VDOMAIN));
 
 VCANONICALFILE = strdup(CanonifyName(VINPUTFILE));
 VREPOSITORY = strdup("\0");
@@ -1057,7 +1057,7 @@ if (CFDSTARTTIME < newstat.st_mtime)
    DeleteItemList(VIMPORT);
    DeleteAuthList(VADMIT);
    DeleteAuthList(VDENY);
-   strcpy(VDOMAIN,"undefined.domain");
+   (void)strlcpy(VDOMAIN,"undefined.domain",sizeof(VDOMAIN));
 
    VADMIT = VADMITTOP = NULL;
    VDENY  = VDENYTOP  = NULL;
@@ -1437,7 +1437,7 @@ switch (GetCommand(recvbuffer))
        
        if ((tloc = time((time_t *)NULL)) == -1)
           {
-          sprintf(conn->output,"Couldn't read system clock\n");
+          (void)snprintf(conn->output,CF_BUFSIZE*2,"Couldn't read system clock\n");
           CfLog(cfinform,conn->output,"time");
           SendTransaction(conn->sd_reply,"BAD: clocks out of synch",0,CF_DONE);
           return true;
@@ -1502,7 +1502,7 @@ switch (GetCommand(recvbuffer))
        
    }
  
- sprintf (sendbuffer,"BAD: Request denied\n");
+ (void)snprintf (sendbuffer,sizeof(sendbuffer),"BAD: Request denied\n");
  SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE);
  CfLog(cfinform,"Closing connection\n",""); 
  return false;
@@ -1610,7 +1610,7 @@ if ((CFSTARTTIME = time((time_t *)NULL))
 if (GetMacroValue(CONTEXTID,"cfrunCommand") == NULL)
    {
    Verbose("cfservd exec request: no cfrunCommand defined\n");
-   sprintf(sendbuffer,"Exec request: no cfrunCommand defined\n");
+   (void)snprintf(sendbuffer,CF_BUFSIZE,"Exec request: no cfrunCommand defined\n");
    SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE);
    return;
    }
@@ -1651,8 +1651,8 @@ else
    {
    if ((args != NULL) & (strlen(args) > 0))
       {
-      strcat(ebuff," ");
-      strcat(ebuff,args);
+      (void)strlcat(ebuff," ",sizeof(ebuff));
+      (void)strlcat(ebuff,args,sizeof(ebuff));
 
       snprintf(sendbuffer,CF_BUFSIZE,"cfservd Executing %s\n",ebuff);
       SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE);
@@ -2568,7 +2568,7 @@ if (S_ISLNK(statbuf.st_mode))
        
    if (readlink(filename,linkbuf,CF_BUFSIZE-1) == -1)
       {
-      sprintf(sendbuffer,"BAD: unable to read link\n");
+      (void)snprintf(sendbuffer,CF_BUFSIZE,"BAD: unable to read link\n");
       CfLog(cferror,sendbuffer,"readlink");
       SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE);
       return -1;
@@ -2671,12 +2671,12 @@ SendTransaction(conn->sd_reply,sendbuffe
 
 if (cfst.cf_readlink != NULL)
    {
-   strcpy(sendbuffer,"OK:");
-   strcat(sendbuffer,cfst.cf_readlink);
+   (void)strlcpy(sendbuffer,"OK:",CF_BUFSIZE);
+   (void)strlcat(sendbuffer,cfst.cf_readlink,CF_BUFSIZE);
    }
 else
    {
-   sprintf(sendbuffer,"OK:");
+   (void)snprintf(sendbuffer,CF_BUFSIZE,"OK:");
    }
 
 SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE);
@@ -2878,13 +2878,13 @@ memset(sendbuffer,0,CF_BUFSIZE);
 
 if (ChecksumChanged(filename,digest,cfverbose,true,'m'))
    {
-   sprintf(sendbuffer,"%s",CFD_TRUE);
+   (void)snprintf(sendbuffer,CF_BUFSIZE,"%s",CFD_TRUE);
    Debug("Checksums didn't match\n");
    SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE);
    }
 else
    {
-   sprintf(sendbuffer,"%s",CFD_FALSE);
+   (void)snprintf(sendbuffer,CF_BUFSIZE,"%s",CFD_FALSE);
    Debug("Checksums matched ok\n");
    SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE);
    }
@@ -2902,7 +2902,7 @@ Debug("CfOpenDirectory(%s)\n",dirname);
   
 if (*dirname != '/')
    {
-   sprintf(sendbuffer,"BAD: request to access a non-absolute filename\n");
+   (void)snprintf(sendbuffer,CF_BUFSIZE,"BAD: request to access a non-absolute filename\n");
    SendTransaction(conn->sd_reply,sendbuffer,0,CF_DONE);
    return -1;
    }
@@ -2934,7 +2934,7 @@ for (dirp = readdir(dirh); dirp != NULL;
    offset += strlen(dirp->d_name) + 1;     /* + zero byte separator */
    }
  
-strcpy(sendbuffer+offset,CFD_TERMINATOR);
+(void)strlcpy(sendbuffer+offset,CFD_TERMINATOR,CF_BUFSIZE - offset);
 SendTransaction(conn->sd_reply,sendbuffer,offset+2+strlen(CFD_TERMINATOR),CF_DONE);
 Debug("END CfOpenDirectory(%s)\n",dirname);
 closedir(dirh);
@@ -2949,7 +2949,7 @@ void Terminate(int sd)
 
 memset(buffer,0,CF_BUFSIZE);
 
-strcpy(buffer,CFD_TERMINATOR);
+(void)strlcpy(buffer,CFD_TERMINATOR,sizeof(buffer));
 
 if (SendTransaction(sd,buffer,strlen(buffer)+1,CF_DONE) == -1)
    {
@@ -3168,7 +3168,7 @@ Debug("Checking to see if we have seen t
   
 if ((errno = db_create(&dbp,NULL,0)) != 0)
    {
-   sprintf(OUTPUT,"Couldn't open average database %s\n",keydb);
+   (void)snprintf(OUTPUT,sizeof(OUTPUT),"Couldn't open average database %s\n",keydb);
    CfLog(cferror,OUTPUT,"db_open");
    return false;
    }
@@ -3179,7 +3179,7 @@ if ((errno = dbp->open(dbp,keydb,NULL,DB
 if ((errno = dbp->open(dbp,NULL,keydb,NULL,DB_BTREE,DB_CREATE,0644)) != 0)    
 #endif
    {
-   sprintf(OUTPUT,"Couldn't open average database %s\n",keydb);
+   (void)snprintf(OUTPUT,sizeof(OUTPUT),"Couldn't open average database %s\n",keydb);
    CfLog(cferror,OUTPUT,"db_open");
    return false;
    }
@@ -3252,7 +3252,7 @@ if ((DHCPLIST != NULL) && IsFuzzyItemIn(
    
    if ((errno = db_create(&dbp,NULL,0)) != 0)
       {
-      sprintf(OUTPUT,"Couldn't open average database %s\n",keydb);
+      (void)snprintf(OUTPUT,sizeof(OUTPUT),"Couldn't open average database %s\n",keydb);
       CfLog(cferror,OUTPUT,"db_open");
       return;
       }
@@ -3263,7 +3263,7 @@ if ((DHCPLIST != NULL) && IsFuzzyItemIn(
    if ((errno = dbp->open(dbp,NULL,keydb,NULL,DB_BTREE,DB_CREATE,0644)) != 0)
 #endif
       {
-      sprintf(OUTPUT,"Couldn't open average database %s\n",keydb);
+      (void)snprintf(OUTPUT,sizeof(OUTPUT),"Couldn't open average database %s\n",keydb);
       CfLog(cferror,OUTPUT,"db_open");
       return;
       }
