--- package.c-0723	Mon Jul 23 16:59:09 2007
+++ package.c	Mon Jul 23 17:12:11 2007
@@ -278,7 +278,7 @@
       }
       else 
       {
-         Verbose("Unable to build package manager command.\n");
+         Verbose("Unable to evaluate package manager command.\n");
          result = 0;
       }
    return result;
@@ -394,6 +394,7 @@
    int cmd_args = 0;
    int cmd_tail_len = 0;
    int original_len;
+   int result;
 
     /* How many words are there in the package manager invocation? */
    for (ptr = rawcmd, cmd_args = 1; NULL != ptr; ptr = strchr(++ptr, ' '))
@@ -418,38 +419,52 @@
    snprintf(OUTPUT,CF_BUFSIZE,"Package manager will be invoked as %s\n", resolvedcmd);
    CfLog(cfinform,OUTPUT,"");
    
-   if ((pp = cfpopen(resolvedcmd, "r")) == NULL)
-      {
-      Verbose("Could not execute package manager\n");
-      /* Return that the package is still not installed */
-      return 0;
-      }
-   
    /* Iterator through package list until we reach the maximum number that cfpopen can take */
    original_len = strlen(resolvedcmd);
    cmd_ptr = &resolvedcmd[original_len];
    for (package = pkglist; package != NULL; package = package->next)
       {
-      Verbose("BuildCommandLine(): Adding package '%s' to the list.\n", package->name);
+      if (cmd_args == CF_MAXSHELLARGS)
+         {
+         Verbose("
+         snprintf(OUTPUT,CF_BUFSIZE,"Skipping package %s (reached CF_MAXSHELLARGS)\n", package->name);
+         CfLog(cfinform,OUTPUT,"");
+         }
+      else if ((int) cmd_ptr - (int) resolvedcmd + strlen(package->name) + 2 > CF_BUFSIZE*2)
+         {
+         snprintf(OUTPUT,CF_BUFSIZE,"Skipping package %s (max buffer size)\n", package->name);
+         CfLog(cfinform,OUTPUT,"");
+         }
+      else
+         {
+         Verbose("BuildCommandLine(): Adding package '%s' to the list.\n", package->name);
 
-      strncpy(cmd_ptr, package->name, &resolvedcmd[CF_BUFSIZE*2] - cmd_ptr);
-      cmd_ptr += strlen(package->name);
-      *cmd_ptr++ = ' ';
+         strncpy(cmd_ptr, package->name, &resolvedcmd[CF_BUFSIZE*2] - cmd_ptr);
+         cmd_ptr += strlen(package->name);
+         *cmd_ptr++ = ' ';
+         }
       }
 
    /* Remove trailing space */
    *--cmd_ptr = '\0';
 
-   if (cmd_ptr != &resolvedcmd[original_len])
+   /* If the revised command line is the same, we have nothing to do. */
+   if (cmd_ptr == &resolvedcmd[original_len])
+      {      
+         result = 0;
+         Verbose("No packages to install.\n");
+      }
+      else
       {      
       /* Have a full command line, so append the tail if necessary. */
       if (cmd_tail_len > 0)
          {
          strncpy(cmd_ptr, cmd_tail, &resolvedcmd[CF_BUFSIZE*2] - cmd_ptr);
          }
+         result = 1;
+         Verbose("Resolved command is '%s'\n", resolvedcmd );
       }
-   Verbose("Resolved command is '%s'\n", resolvedcmd );
-   return 1;
+   return result;
 }
       
 /*********************************************************************/
