(linenum→info "unix/slp.c:2238")

glibc/2.7/nis/nis_creategroup.c

    1: /* Copyright (c) 1997, 1998, 1999, 2000, 2006 Free Software Foundation, Inc.
    2:    This file is part of the GNU C Library.
    3:    Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
    4: 
    5:    The GNU C Library is free software; you can redistribute it and/or
    6:    modify it under the terms of the GNU Lesser General Public
    7:    License as published by the Free Software Foundation; either
    8:    version 2.1 of the License, or (at your option) any later version.
    9: 
   10:    The GNU C Library is distributed in the hope that it will be useful,
   11:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   12:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   13:    Lesser General Public License for more details.
   14: 
   15:    You should have received a copy of the GNU Lesser General Public
   16:    License along with the GNU C Library; if not, write to the Free
   17:    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   18:    02111-1307 USA.  */
   19: 
   20: #include <time.h>
   21: #include <string.h>
   22: #include <rpcsvc/nis.h>
   23: 
   24: nis_error
   25: nis_creategroup (const_nis_name group, unsigned int flags)
   26: {
   27:   if (group != NULL && group[0] != '\0')
   28:     {
   29:       size_t grouplen = strlen (group);
   30:       char buf[grouplen + 50];
   31:       char leafbuf[grouplen + 2];
   32:       char domainbuf[grouplen + 2];
   33:       nis_error status;
   34:       nis_result *res;
   35:       char *cp, *cp2;
   36:       nis_object *obj;
   37: 
   38:       cp = stpcpy (buf, nis_leaf_of_r (group, leafbuf, sizeof (leafbuf) - 1));
   39:       cp = stpcpy (cp, ".groups_dir");
   40:       cp2 = nis_domain_of_r (group, domainbuf, sizeof (domainbuf) - 1);
   41:       if (cp2 != NULL && cp2[0] != '\0')
   42:         {
   43:           *cp++ = '.';
   44:           stpcpy (cp, cp2);
   45:         }
   46:       else
   47:         return NIS_BADNAME;
   48: 
   49:       obj = calloc (1, sizeof (nis_object));
   50:       if (__builtin_expect (obj == NULL, 0))
   51:         return NIS_NOMEMORY;
   52: 
   53:       obj->zo_oid.ctime = obj->zo_oid.mtime = time (NULL);
   54:       obj->zo_name = strdup (leafbuf);
   55:       obj->zo_owner = __nis_default_owner (NULL);
   56:       obj->zo_group = __nis_default_group (NULL);
   57:       obj->zo_domain = strdup (domainbuf);
   58:       if (obj->zo_name == NULL || obj->zo_owner == NULL
   59:           || obj->zo_group == NULL || obj->zo_domain == NULL)
   60:         {
   61:           free (obj->zo_group);
   62:           free (obj->zo_owner);
   63:           free (obj->zo_name);
   64:           free (obj);
   65:           return NIS_NOMEMORY;
   66:         }
   67:       obj->zo_access = __nis_default_access (NULL, 0);
   68:       obj->zo_ttl = 60 * 60;
   69:       obj->zo_data.zo_type = NIS_GROUP_OBJ;
   70:       obj->zo_data.objdata_u.gr_data.gr_flags = flags;
   71:       obj->zo_data.objdata_u.gr_data.gr_members.gr_members_len = 0;
   72:       obj->zo_data.objdata_u.gr_data.gr_members.gr_members_val = NULL;
   73: 
   74:       res = nis_add (buf, obj);
   75:       nis_free_object (obj);
   76:       if (res == NULL)
   77:         return NIS_NOMEMORY;
   78:       status = NIS_RES_STATUS (res);
   79:       nis_freeresult (res);
   80: 
   81:       return status;
   82:     }
   83:   return NIS_FAIL;
   84: }
Syntax (Markdown)