root/source3/passdb/util_unixsids.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. sid_check_is_unix_users
  2. sid_check_is_in_unix_users
  3. uid_to_unix_users_sid
  4. gid_to_unix_groups_sid
  5. unix_users_domain_name
  6. lookup_unix_user_name
  7. sid_check_is_unix_groups
  8. sid_check_is_in_unix_groups
  9. unix_groups_domain_name
  10. lookup_unix_group_name

   1 /* 
   2    Unix SMB/CIFS implementation.
   3    Translate unix-defined names to SIDs and vice versa
   4    Copyright (C) Volker Lendecke 2005
   5       
   6    This program is free software; you can redistribute it and/or modify
   7    it under the terms of the GNU General Public License as published by
   8    the Free Software Foundation; either version 3 of the License, or
   9    (at your option) any later version.
  10    
  11    This program is distributed in the hope that it will be useful,
  12    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14    GNU General Public License for more details.
  15    
  16    You should have received a copy of the GNU General Public License
  17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18 */
  19 
  20 #include "includes.h"
  21 
  22 bool sid_check_is_unix_users(const DOM_SID *sid)
     /* [<][>][^][v][top][bottom][index][help] */
  23 {
  24         return sid_equal(sid, &global_sid_Unix_Users);
  25 }
  26 
  27 bool sid_check_is_in_unix_users(const DOM_SID *sid)
     /* [<][>][^][v][top][bottom][index][help] */
  28 {
  29         DOM_SID dom_sid;
  30         uint32 rid;
  31 
  32         sid_copy(&dom_sid, sid);
  33         sid_split_rid(&dom_sid, &rid);
  34         
  35         return sid_check_is_unix_users(&dom_sid);
  36 }
  37 
  38 bool uid_to_unix_users_sid(uid_t uid, DOM_SID *sid)
     /* [<][>][^][v][top][bottom][index][help] */
  39 {
  40         sid_copy(sid, &global_sid_Unix_Users);
  41         return sid_append_rid(sid, (uint32_t)uid);
  42 }
  43 
  44 bool gid_to_unix_groups_sid(gid_t gid, DOM_SID *sid)
     /* [<][>][^][v][top][bottom][index][help] */
  45 {
  46         sid_copy(sid, &global_sid_Unix_Groups);
  47         return sid_append_rid(sid, (uint32_t)gid);
  48 }
  49 
  50 const char *unix_users_domain_name(void)
     /* [<][>][^][v][top][bottom][index][help] */
  51 {
  52         return "Unix User";
  53 }
  54 
  55 bool lookup_unix_user_name(const char *name, DOM_SID *sid)
     /* [<][>][^][v][top][bottom][index][help] */
  56 {
  57         struct passwd *pwd;
  58 
  59         pwd = getpwnam_alloc(talloc_autofree_context(), name);
  60         if (pwd == NULL) {
  61                 return False;
  62         }
  63 
  64         sid_copy(sid, &global_sid_Unix_Users);
  65         sid_append_rid(sid, (uint32_t)pwd->pw_uid); /* For 64-bit uid's we have enough
  66                                           * space ... */
  67         TALLOC_FREE(pwd);
  68         return True;
  69 }
  70 
  71 bool sid_check_is_unix_groups(const DOM_SID *sid)
     /* [<][>][^][v][top][bottom][index][help] */
  72 {
  73         return sid_equal(sid, &global_sid_Unix_Groups);
  74 }
  75 
  76 bool sid_check_is_in_unix_groups(const DOM_SID *sid)
     /* [<][>][^][v][top][bottom][index][help] */
  77 {
  78         DOM_SID dom_sid;
  79         uint32 rid;
  80 
  81         sid_copy(&dom_sid, sid);
  82         sid_split_rid(&dom_sid, &rid);
  83         
  84         return sid_check_is_unix_groups(&dom_sid);
  85 }
  86 
  87 const char *unix_groups_domain_name(void)
     /* [<][>][^][v][top][bottom][index][help] */
  88 {
  89         return "Unix Group";
  90 }
  91 
  92 bool lookup_unix_group_name(const char *name, DOM_SID *sid)
     /* [<][>][^][v][top][bottom][index][help] */
  93 {
  94         struct group *grp;
  95 
  96         grp = sys_getgrnam(name);
  97         if (grp == NULL) {
  98                 return False;
  99         }
 100 
 101         sid_copy(sid, &global_sid_Unix_Groups);
 102         sid_append_rid(sid, (uint32_t)grp->gr_gid); /* For 64-bit uid's we have enough
 103                                            * space ... */
 104         return True;
 105 }

/* [<][>][^][v][top][bottom][index][help] */