home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume38 / shadow / part13 / grpack.c < prev    next >
C/C++ Source or Header  |  1993-08-14  |  2KB  |  84 lines

  1. /*
  2.  * Copyright 1990, John F. Haugh II
  3.  * All rights reserved.
  4.  *
  5.  * Use, duplication, and disclosure prohibited without
  6.  * the express written permission of the author.
  7.  *
  8.  * Duplication is permitted for non-commercial [ profit making ]
  9.  * purposes provided this and other copyright notices remain
  10.  * intact.
  11.  */
  12.  
  13. #include <stdio.h>
  14. #include <grp.h>
  15. #ifdef    BSD
  16. #include <strings.h>
  17. #else
  18. #include <string.h>
  19. #endif
  20.  
  21. #ifndef    lint
  22. static    char    sccsid[] = "@(#)grpack.c    3.3    08:45:46    12 Sep 1991";
  23. #endif
  24.  
  25. int    gr_pack (group, buf)
  26. struct    group    *group;
  27. char    *buf;
  28. {
  29.     char    *cp;
  30.     int    i;
  31.  
  32.     cp = buf;
  33.     strcpy (cp, group->gr_name);
  34.     cp += strlen (cp) + 1;
  35.  
  36.     strcpy (cp, group->gr_passwd);
  37.     cp += strlen (cp) + 1;
  38.  
  39.     memcpy (cp, (char *) &group->gr_gid, sizeof group->gr_gid);
  40.     cp += sizeof group->gr_gid;
  41.  
  42.     for (i = 0;group->gr_mem[i];i++) {
  43.         strcpy (cp, group->gr_mem[i]);
  44.         cp += strlen (cp) + 1;
  45.     }
  46.     *cp++ = '\0';
  47.  
  48.     return cp - buf;
  49. }
  50.  
  51. int    gr_unpack (buf, len, group)
  52. char    *buf;
  53. int    len;
  54. struct    group    *group;
  55. {
  56.     char    *org = buf;
  57.     int    i;
  58.  
  59.     group->gr_name = buf;
  60.     buf += strlen (buf) + 1;
  61.     if (buf - org > len)
  62.         return -1;
  63.  
  64.     group->gr_passwd = buf;
  65.     buf += strlen (buf) + 1;
  66.     if (buf - org > len)
  67.         return -1;
  68.  
  69.     memcpy ((char *) &group->gr_gid, (char *) buf, sizeof group->gr_gid);
  70.     buf += sizeof group->gr_gid;
  71.     if (buf - org > len)
  72.         return -1;
  73.  
  74.     for (i = 0;*buf && i < 1024;i++) {
  75.         group->gr_mem[i] = buf;
  76.         buf += strlen (buf) + 1;
  77.  
  78.         if (buf - org > len)
  79.             return -1;
  80.     }
  81.     group->gr_mem[i] = (char *) 0;
  82.     return 0;
  83. }
  84.