passdb/pdb_tdb.c

ソースコードを見る。

データ構造

struct  pwent_list

関数

static BOOL init_sam_from_buffer_v0 (struct samu *sampass, uint8 *buf, uint32 buflen)
static BOOL init_sam_from_buffer_v1 (struct samu *sampass, uint8 *buf, uint32 buflen)
BOOL init_sam_from_buffer_v2 (struct samu *sampass, uint8 *buf, uint32 buflen)
static BOOL init_sam_from_buffer (struct samu *sampass, uint8 *buf, uint32 buflen)
static uint32 init_buffer_from_sam (uint8 **buf, struct samu *sampass, BOOL size_only)
static BOOL tdbsam_convert (int32 from)
static BOOL tdbsam_open (const char *name)
void tdbsam_close (void)
static int tdbsam_traverse_setpwent (TDB_CONTEXT *t, TDB_DATA key, TDB_DATA data, void *state)
static NTSTATUS tdbsam_setsampwent (struct pdb_methods *my_methods, BOOL update, uint32 acb_mask)
static void tdbsam_endsampwent (struct pdb_methods *my_methods)
static NTSTATUS tdbsam_getsampwent (struct pdb_methods *my_methods, struct samu *user)
static NTSTATUS tdbsam_getsampwnam (struct pdb_methods *my_methods, struct samu *user, const char *sname)
static NTSTATUS tdbsam_getsampwrid (struct pdb_methods *my_methods, struct samu *user, uint32 rid)
static NTSTATUS tdbsam_getsampwsid (struct pdb_methods *my_methods, struct samu *user, const DOM_SID *sid)
static BOOL tdb_delete_samacct_only (struct samu *sam_pass)
static NTSTATUS tdbsam_delete_sam_account (struct pdb_methods *my_methods, struct samu *sam_pass)
static BOOL tdb_update_samacct_only (struct samu *newpwd, int flag)
static BOOL tdb_update_ridrec_only (struct samu *newpwd, int flag)
static BOOL tdb_update_sam (struct pdb_methods *my_methods, struct samu *newpwd, int flag)
static NTSTATUS tdbsam_update_sam_account (struct pdb_methods *my_methods, struct samu *newpwd)
static NTSTATUS tdbsam_add_sam_account (struct pdb_methods *my_methods, struct samu *newpwd)
static NTSTATUS tdbsam_rename_sam_account (struct pdb_methods *my_methods, struct samu *old_acct, const char *newname)
static BOOL tdbsam_rid_algorithm (struct pdb_methods *methods)
static BOOL init_idmap_tdb (TDB_CONTEXT *tdb)
static BOOL tdbsam_new_rid (struct pdb_methods *methods, uint32 *prid)
static NTSTATUS pdb_init_tdbsam (struct pdb_methods **pdb_method, const char *location)
NTSTATUS pdb_tdbsam_init (void)

変数

static int tdbsam_debug_level = DBGC_ALL
static struct pwent_listtdbsam_pwent_list
static BOOL pwent_initialized
static TDB_CONTEXTtdbsam
static int ref_count = 0
static pstring tdbsam_filename


関数

static BOOL init_sam_from_buffer_v0 ( struct samu sampass,
uint8 *  buf,
uint32  buflen 
) [static]

pdb_tdb.c72 行で定義されています。

参照先 lenPDB_DEFAULTPDB_SETpdb_set_acct_ctrl()pdb_set_acct_desc()pdb_set_bad_password_count()pdb_set_dir_drive()pdb_set_domain()pdb_set_fullname()pdb_set_group_sid_from_rid()pdb_set_homedir()pdb_set_hours()pdb_set_hours_len()pdb_set_kickoff_time()pdb_set_lanman_passwd()pdb_set_logoff_time()pdb_set_logon_count()pdb_set_logon_divs()pdb_set_logon_script()pdb_set_logon_time()pdb_set_munged_dial()pdb_set_nt_passwd()pdb_set_nt_username()pdb_set_pass_can_change_time()pdb_set_pass_last_set_time()pdb_set_pass_must_change_time()pdb_set_profile_path()pdb_set_pw_history()pdb_set_unknown_6()pdb_set_user_sid_from_rid()pdb_set_username()pdb_set_workstations()talloc_sub_basic()tdb_unpack()username.

参照元 tdbsam_convert().

00073 {
00074 
00075         /* times are stored as 32bit integer
00076            take care on system with 64bit wide time_t
00077            --SSS */
00078         uint32  logon_time,
00079                 logoff_time,
00080                 kickoff_time,
00081                 pass_last_set_time,
00082                 pass_can_change_time,
00083                 pass_must_change_time;
00084         char *username = NULL;
00085         char *domain = NULL;
00086         char *nt_username = NULL;
00087         char *dir_drive = NULL;
00088         char *unknown_str = NULL;
00089         char *munged_dial = NULL;
00090         char *fullname = NULL;
00091         char *homedir = NULL;
00092         char *logon_script = NULL;
00093         char *profile_path = NULL;
00094         char *acct_desc = NULL;
00095         char *workstations = NULL;
00096         uint32  username_len, domain_len, nt_username_len,
00097                 dir_drive_len, unknown_str_len, munged_dial_len,
00098                 fullname_len, homedir_len, logon_script_len,
00099                 profile_path_len, acct_desc_len, workstations_len;
00100                 
00101         uint32  user_rid, group_rid, remove_me, hours_len, unknown_6;
00102         uint16  acct_ctrl, logon_divs;
00103         uint16  bad_password_count, logon_count;
00104         uint8   *hours = NULL;
00105         uint8   *lm_pw_ptr = NULL, *nt_pw_ptr = NULL;
00106         uint32          len = 0;
00107         uint32          lm_pw_len, nt_pw_len, hourslen;
00108         BOOL ret = True;
00109         
00110         if(sampass == NULL || buf == NULL) {
00111                 DEBUG(0, ("init_sam_from_buffer_v0: NULL parameters found!\n"));
00112                 return False;
00113         }
00114 
00115 /* TDB_FORMAT_STRING_V0       "ddddddBBBBBBBBBBBBddBBwdwdBwwd" */
00116 
00117         /* unpack the buffer into variables */
00118         len = tdb_unpack ((char *)buf, buflen, TDB_FORMAT_STRING_V0,
00119                 &logon_time,                                            /* d */
00120                 &logoff_time,                                           /* d */
00121                 &kickoff_time,                                          /* d */
00122                 &pass_last_set_time,                                    /* d */
00123                 &pass_can_change_time,                                  /* d */
00124                 &pass_must_change_time,                                 /* d */
00125                 &username_len, &username,                               /* B */
00126                 &domain_len, &domain,                                   /* B */
00127                 &nt_username_len, &nt_username,                         /* B */
00128                 &fullname_len, &fullname,                               /* B */
00129                 &homedir_len, &homedir,                                 /* B */
00130                 &dir_drive_len, &dir_drive,                             /* B */
00131                 &logon_script_len, &logon_script,                       /* B */
00132                 &profile_path_len, &profile_path,                       /* B */
00133                 &acct_desc_len, &acct_desc,                             /* B */
00134                 &workstations_len, &workstations,                       /* B */
00135                 &unknown_str_len, &unknown_str,                         /* B */
00136                 &munged_dial_len, &munged_dial,                         /* B */
00137                 &user_rid,                                              /* d */
00138                 &group_rid,                                             /* d */
00139                 &lm_pw_len, &lm_pw_ptr,                                 /* B */
00140                 &nt_pw_len, &nt_pw_ptr,                                 /* B */
00141                 &acct_ctrl,                                             /* w */
00142                 &remove_me, /* remove on the next TDB_FORMAT upgarde */ /* d */
00143                 &logon_divs,                                            /* w */
00144                 &hours_len,                                             /* d */
00145                 &hourslen, &hours,                                      /* B */
00146                 &bad_password_count,                                    /* w */
00147                 &logon_count,                                           /* w */
00148                 &unknown_6);                                            /* d */
00149                 
00150         if (len == (uint32) -1)  {
00151                 ret = False;
00152                 goto done;
00153         }
00154 
00155         pdb_set_logon_time(sampass, logon_time, PDB_SET);
00156         pdb_set_logoff_time(sampass, logoff_time, PDB_SET);
00157         pdb_set_kickoff_time(sampass, kickoff_time, PDB_SET);
00158         pdb_set_pass_can_change_time(sampass, pass_can_change_time, PDB_SET);
00159         pdb_set_pass_must_change_time(sampass, pass_must_change_time, PDB_SET);
00160         pdb_set_pass_last_set_time(sampass, pass_last_set_time, PDB_SET);
00161 
00162         pdb_set_username(sampass, username, PDB_SET); 
00163         pdb_set_domain(sampass, domain, PDB_SET);
00164         pdb_set_nt_username(sampass, nt_username, PDB_SET);
00165         pdb_set_fullname(sampass, fullname, PDB_SET);
00166 
00167         if (homedir) {
00168                 pdb_set_homedir(sampass, homedir, PDB_SET);
00169         }
00170         else {
00171                 pdb_set_homedir(sampass, 
00172                         talloc_sub_basic(sampass, username, domain,
00173                                          lp_logon_home()),
00174                         PDB_DEFAULT);
00175         }
00176 
00177         if (dir_drive)  
00178                 pdb_set_dir_drive(sampass, dir_drive, PDB_SET);
00179         else {
00180                 pdb_set_dir_drive(sampass, 
00181                         talloc_sub_basic(sampass, username, domain,
00182                                          lp_logon_drive()),
00183                         PDB_DEFAULT);
00184         }
00185 
00186         if (logon_script) 
00187                 pdb_set_logon_script(sampass, logon_script, PDB_SET);
00188         else {
00189                 pdb_set_logon_script(sampass, 
00190                         talloc_sub_basic(sampass, username, domain,
00191                                          lp_logon_script()),
00192                         PDB_DEFAULT);
00193         }
00194         
00195         if (profile_path) {     
00196                 pdb_set_profile_path(sampass, profile_path, PDB_SET);
00197         } else {
00198                 pdb_set_profile_path(sampass, 
00199                         talloc_sub_basic(sampass, username, domain,
00200                                          lp_logon_path()),
00201                         PDB_DEFAULT);
00202         }
00203 
00204         pdb_set_acct_desc(sampass, acct_desc, PDB_SET);
00205         pdb_set_workstations(sampass, workstations, PDB_SET);
00206         pdb_set_munged_dial(sampass, munged_dial, PDB_SET);
00207 
00208         if (lm_pw_ptr && lm_pw_len == LM_HASH_LEN) {
00209                 if (!pdb_set_lanman_passwd(sampass, lm_pw_ptr, PDB_SET)) {
00210                         ret = False;
00211                         goto done;
00212                 }
00213         }
00214 
00215         if (nt_pw_ptr && nt_pw_len == NT_HASH_LEN) {
00216                 if (!pdb_set_nt_passwd(sampass, nt_pw_ptr, PDB_SET)) {
00217                         ret = False;
00218                         goto done;
00219                 }
00220         }
00221 
00222         pdb_set_pw_history(sampass, NULL, 0, PDB_SET);
00223         pdb_set_user_sid_from_rid(sampass, user_rid, PDB_SET);
00224         pdb_set_group_sid_from_rid(sampass, group_rid, PDB_SET);
00225         pdb_set_hours_len(sampass, hours_len, PDB_SET);
00226         pdb_set_bad_password_count(sampass, bad_password_count, PDB_SET);
00227         pdb_set_logon_count(sampass, logon_count, PDB_SET);
00228         pdb_set_unknown_6(sampass, unknown_6, PDB_SET);
00229         pdb_set_acct_ctrl(sampass, acct_ctrl, PDB_SET);
00230         pdb_set_logon_divs(sampass, logon_divs, PDB_SET);
00231         pdb_set_hours(sampass, hours, PDB_SET);
00232 
00233 done:
00234 
00235         SAFE_FREE(username);
00236         SAFE_FREE(domain);
00237         SAFE_FREE(nt_username);
00238         SAFE_FREE(fullname);
00239         SAFE_FREE(homedir);
00240         SAFE_FREE(dir_drive);
00241         SAFE_FREE(logon_script);
00242         SAFE_FREE(profile_path);
00243         SAFE_FREE(acct_desc);
00244         SAFE_FREE(workstations);
00245         SAFE_FREE(munged_dial);
00246         SAFE_FREE(unknown_str);
00247         SAFE_FREE(lm_pw_ptr);
00248         SAFE_FREE(nt_pw_ptr);
00249         SAFE_FREE(hours);
00250 
00251         return ret;
00252 }

static BOOL init_sam_from_buffer_v1 ( struct samu sampass,
uint8 *  buf,
uint32  buflen 
) [static]

pdb_tdb.c257 行で定義されています。

参照先 lenPDB_DEFAULTPDB_SETpdb_set_acct_ctrl()pdb_set_acct_desc()pdb_set_bad_password_count()pdb_set_bad_password_time()pdb_set_dir_drive()pdb_set_domain()pdb_set_fullname()pdb_set_group_sid_from_rid()pdb_set_homedir()pdb_set_hours()pdb_set_hours_len()pdb_set_kickoff_time()pdb_set_lanman_passwd()pdb_set_logoff_time()pdb_set_logon_count()pdb_set_logon_divs()pdb_set_logon_script()pdb_set_logon_time()pdb_set_munged_dial()pdb_set_nt_passwd()pdb_set_nt_username()pdb_set_pass_can_change_time()pdb_set_pass_last_set_time()pdb_set_pass_must_change_time()pdb_set_profile_path()pdb_set_pw_history()pdb_set_unknown_6()pdb_set_user_sid_from_rid()pdb_set_username()pdb_set_workstations()talloc_sub_basic()tdb_unpack()username.

参照元 tdbsam_convert().

00258 {
00259 
00260         /* times are stored as 32bit integer
00261            take care on system with 64bit wide time_t
00262            --SSS */
00263         uint32  logon_time,
00264                 logoff_time,
00265                 kickoff_time,
00266                 bad_password_time,
00267                 pass_last_set_time,
00268                 pass_can_change_time,
00269                 pass_must_change_time;
00270         char *username = NULL;
00271         char *domain = NULL;
00272         char *nt_username = NULL;
00273         char *dir_drive = NULL;
00274         char *unknown_str = NULL;
00275         char *munged_dial = NULL;
00276         char *fullname = NULL;
00277         char *homedir = NULL;
00278         char *logon_script = NULL;
00279         char *profile_path = NULL;
00280         char *acct_desc = NULL;
00281         char *workstations = NULL;
00282         uint32  username_len, domain_len, nt_username_len,
00283                 dir_drive_len, unknown_str_len, munged_dial_len,
00284                 fullname_len, homedir_len, logon_script_len,
00285                 profile_path_len, acct_desc_len, workstations_len;
00286                 
00287         uint32  user_rid, group_rid, remove_me, hours_len, unknown_6;
00288         uint16  acct_ctrl, logon_divs;
00289         uint16  bad_password_count, logon_count;
00290         uint8   *hours = NULL;
00291         uint8   *lm_pw_ptr = NULL, *nt_pw_ptr = NULL;
00292         uint32          len = 0;
00293         uint32          lm_pw_len, nt_pw_len, hourslen;
00294         BOOL ret = True;
00295         
00296         if(sampass == NULL || buf == NULL) {
00297                 DEBUG(0, ("init_sam_from_buffer_v1: NULL parameters found!\n"));
00298                 return False;
00299         }
00300 
00301 /* TDB_FORMAT_STRING_V1       "dddddddBBBBBBBBBBBBddBBwdwdBwwd" */
00302 
00303         /* unpack the buffer into variables */
00304         len = tdb_unpack ((char *)buf, buflen, TDB_FORMAT_STRING_V1,
00305                 &logon_time,                                            /* d */
00306                 &logoff_time,                                           /* d */
00307                 &kickoff_time,                                          /* d */
00308                 /* Change from V0 is addition of bad_password_time field. */
00309                 &bad_password_time,                                     /* d */
00310                 &pass_last_set_time,                                    /* d */
00311                 &pass_can_change_time,                                  /* d */
00312                 &pass_must_change_time,                                 /* d */
00313                 &username_len, &username,                               /* B */
00314                 &domain_len, &domain,                                   /* B */
00315                 &nt_username_len, &nt_username,                         /* B */
00316                 &fullname_len, &fullname,                               /* B */
00317                 &homedir_len, &homedir,                                 /* B */
00318                 &dir_drive_len, &dir_drive,                             /* B */
00319                 &logon_script_len, &logon_script,                       /* B */
00320                 &profile_path_len, &profile_path,                       /* B */
00321                 &acct_desc_len, &acct_desc,                             /* B */
00322                 &workstations_len, &workstations,                       /* B */
00323                 &unknown_str_len, &unknown_str,                         /* B */
00324                 &munged_dial_len, &munged_dial,                         /* B */
00325                 &user_rid,                                              /* d */
00326                 &group_rid,                                             /* d */
00327                 &lm_pw_len, &lm_pw_ptr,                                 /* B */
00328                 &nt_pw_len, &nt_pw_ptr,                                 /* B */
00329                 &acct_ctrl,                                             /* w */
00330                 &remove_me,                                             /* d */
00331                 &logon_divs,                                            /* w */
00332                 &hours_len,                                             /* d */
00333                 &hourslen, &hours,                                      /* B */
00334                 &bad_password_count,                                    /* w */
00335                 &logon_count,                                           /* w */
00336                 &unknown_6);                                            /* d */
00337                 
00338         if (len == (uint32) -1)  {
00339                 ret = False;
00340                 goto done;
00341         }
00342 
00343         pdb_set_logon_time(sampass, logon_time, PDB_SET);
00344         pdb_set_logoff_time(sampass, logoff_time, PDB_SET);
00345         pdb_set_kickoff_time(sampass, kickoff_time, PDB_SET);
00346 
00347         /* Change from V0 is addition of bad_password_time field. */
00348         pdb_set_bad_password_time(sampass, bad_password_time, PDB_SET);
00349         pdb_set_pass_can_change_time(sampass, pass_can_change_time, PDB_SET);
00350         pdb_set_pass_must_change_time(sampass, pass_must_change_time, PDB_SET);
00351         pdb_set_pass_last_set_time(sampass, pass_last_set_time, PDB_SET);
00352 
00353         pdb_set_username(sampass, username, PDB_SET); 
00354         pdb_set_domain(sampass, domain, PDB_SET);
00355         pdb_set_nt_username(sampass, nt_username, PDB_SET);
00356         pdb_set_fullname(sampass, fullname, PDB_SET);
00357 
00358         if (homedir) {
00359                 pdb_set_homedir(sampass, homedir, PDB_SET);
00360         }
00361         else {
00362                 pdb_set_homedir(sampass, 
00363                         talloc_sub_basic(sampass, username, domain,
00364                                          lp_logon_home()),
00365                         PDB_DEFAULT);
00366         }
00367 
00368         if (dir_drive)  
00369                 pdb_set_dir_drive(sampass, dir_drive, PDB_SET);
00370         else {
00371                 pdb_set_dir_drive(sampass, 
00372                         talloc_sub_basic(sampass, username, domain,
00373                                          lp_logon_drive()),
00374                         PDB_DEFAULT);
00375         }
00376 
00377         if (logon_script) 
00378                 pdb_set_logon_script(sampass, logon_script, PDB_SET);
00379         else {
00380                 pdb_set_logon_script(sampass, 
00381                         talloc_sub_basic(sampass, username, domain,
00382                                          lp_logon_script()),
00383                         PDB_DEFAULT);
00384         }
00385         
00386         if (profile_path) {     
00387                 pdb_set_profile_path(sampass, profile_path, PDB_SET);
00388         } else {
00389                 pdb_set_profile_path(sampass, 
00390                         talloc_sub_basic(sampass, username, domain,
00391                                          lp_logon_path()),
00392                         PDB_DEFAULT);
00393         }
00394 
00395         pdb_set_acct_desc(sampass, acct_desc, PDB_SET);
00396         pdb_set_workstations(sampass, workstations, PDB_SET);
00397         pdb_set_munged_dial(sampass, munged_dial, PDB_SET);
00398 
00399         if (lm_pw_ptr && lm_pw_len == LM_HASH_LEN) {
00400                 if (!pdb_set_lanman_passwd(sampass, lm_pw_ptr, PDB_SET)) {
00401                         ret = False;
00402                         goto done;
00403                 }
00404         }
00405 
00406         if (nt_pw_ptr && nt_pw_len == NT_HASH_LEN) {
00407                 if (!pdb_set_nt_passwd(sampass, nt_pw_ptr, PDB_SET)) {
00408                         ret = False;
00409                         goto done;
00410                 }
00411         }
00412 
00413         pdb_set_pw_history(sampass, NULL, 0, PDB_SET);
00414 
00415         pdb_set_user_sid_from_rid(sampass, user_rid, PDB_SET);
00416         pdb_set_group_sid_from_rid(sampass, group_rid, PDB_SET);
00417         pdb_set_hours_len(sampass, hours_len, PDB_SET);
00418         pdb_set_bad_password_count(sampass, bad_password_count, PDB_SET);
00419         pdb_set_logon_count(sampass, logon_count, PDB_SET);
00420         pdb_set_unknown_6(sampass, unknown_6, PDB_SET);
00421         pdb_set_acct_ctrl(sampass, acct_ctrl, PDB_SET);
00422         pdb_set_logon_divs(sampass, logon_divs, PDB_SET);
00423         pdb_set_hours(sampass, hours, PDB_SET);
00424 
00425 done:
00426 
00427         SAFE_FREE(username);
00428         SAFE_FREE(domain);
00429         SAFE_FREE(nt_username);
00430         SAFE_FREE(fullname);
00431         SAFE_FREE(homedir);
00432         SAFE_FREE(dir_drive);
00433         SAFE_FREE(logon_script);
00434         SAFE_FREE(profile_path);
00435         SAFE_FREE(acct_desc);
00436         SAFE_FREE(workstations);
00437         SAFE_FREE(munged_dial);
00438         SAFE_FREE(unknown_str);
00439         SAFE_FREE(lm_pw_ptr);
00440         SAFE_FREE(nt_pw_ptr);
00441         SAFE_FREE(hours);
00442 
00443         return ret;
00444 }

BOOL init_sam_from_buffer_v2 ( struct samu sampass,
uint8 *  buf,
uint32  buflen 
)

pdb_tdb.c446 行で定義されています。

参照先 lenPDB_DEFAULTpdb_get_account_policy()PDB_SETpdb_set_acct_ctrl()pdb_set_acct_desc()pdb_set_bad_password_count()pdb_set_bad_password_time()pdb_set_dir_drive()pdb_set_domain()pdb_set_fullname()pdb_set_group_sid_from_rid()pdb_set_homedir()pdb_set_hours()pdb_set_hours_len()pdb_set_kickoff_time()pdb_set_lanman_passwd()pdb_set_logoff_time()pdb_set_logon_count()pdb_set_logon_divs()pdb_set_logon_script()pdb_set_logon_time()pdb_set_munged_dial()pdb_set_nt_passwd()pdb_set_nt_username()pdb_set_pass_can_change_time()pdb_set_pass_last_set_time()pdb_set_pass_must_change_time()pdb_set_profile_path()pdb_set_pw_history()pdb_set_unknown_6()pdb_set_user_sid_from_rid()pdb_set_username()pdb_set_workstations()standard_sub_basic()talloc_sub_basic()tdb_unpack()username.

参照元 tdbsam_convert().

00447 {
00448 
00449         /* times are stored as 32bit integer
00450            take care on system with 64bit wide time_t
00451            --SSS */
00452         uint32  logon_time,
00453                 logoff_time,
00454                 kickoff_time,
00455                 bad_password_time,
00456                 pass_last_set_time,
00457                 pass_can_change_time,
00458                 pass_must_change_time;
00459         char *username = NULL;
00460         char *domain = NULL;
00461         char *nt_username = NULL;
00462         char *dir_drive = NULL;
00463         char *unknown_str = NULL;
00464         char *munged_dial = NULL;
00465         char *fullname = NULL;
00466         char *homedir = NULL;
00467         char *logon_script = NULL;
00468         char *profile_path = NULL;
00469         char *acct_desc = NULL;
00470         char *workstations = NULL;
00471         uint32  username_len, domain_len, nt_username_len,
00472                 dir_drive_len, unknown_str_len, munged_dial_len,
00473                 fullname_len, homedir_len, logon_script_len,
00474                 profile_path_len, acct_desc_len, workstations_len;
00475                 
00476         uint32  user_rid, group_rid, hours_len, unknown_6;
00477         uint16  acct_ctrl, logon_divs;
00478         uint16  bad_password_count, logon_count;
00479         uint8   *hours = NULL;
00480         uint8   *lm_pw_ptr = NULL, *nt_pw_ptr = NULL, *nt_pw_hist_ptr = NULL;
00481         uint32          len = 0;
00482         uint32          lm_pw_len, nt_pw_len, nt_pw_hist_len, hourslen;
00483         uint32 pwHistLen = 0;
00484         BOOL ret = True;
00485         fstring tmpstring;
00486         BOOL expand_explicit = lp_passdb_expand_explicit();
00487         
00488         if(sampass == NULL || buf == NULL) {
00489                 DEBUG(0, ("init_sam_from_buffer_v2: NULL parameters found!\n"));
00490                 return False;
00491         }
00492                                                                         
00493 /* TDB_FORMAT_STRING_V2       "dddddddBBBBBBBBBBBBddBBBwwdBwwd" */
00494 
00495         /* unpack the buffer into variables */
00496         len = tdb_unpack ((char *)buf, buflen, TDB_FORMAT_STRING_V2,
00497                 &logon_time,                                            /* d */
00498                 &logoff_time,                                           /* d */
00499                 &kickoff_time,                                          /* d */
00500                 &bad_password_time,                                     /* d */
00501                 &pass_last_set_time,                                    /* d */
00502                 &pass_can_change_time,                                  /* d */
00503                 &pass_must_change_time,                                 /* d */
00504                 &username_len, &username,                               /* B */
00505                 &domain_len, &domain,                                   /* B */
00506                 &nt_username_len, &nt_username,                         /* B */
00507                 &fullname_len, &fullname,                               /* B */
00508                 &homedir_len, &homedir,                                 /* B */
00509                 &dir_drive_len, &dir_drive,                             /* B */
00510                 &logon_script_len, &logon_script,                       /* B */
00511                 &profile_path_len, &profile_path,                       /* B */
00512                 &acct_desc_len, &acct_desc,                             /* B */
00513                 &workstations_len, &workstations,                       /* B */
00514                 &unknown_str_len, &unknown_str,                         /* B */
00515                 &munged_dial_len, &munged_dial,                         /* B */
00516                 &user_rid,                                              /* d */
00517                 &group_rid,                                             /* d */
00518                 &lm_pw_len, &lm_pw_ptr,                                 /* B */
00519                 &nt_pw_len, &nt_pw_ptr,                                 /* B */
00520                 /* Change from V1 is addition of password history field. */
00521                 &nt_pw_hist_len, &nt_pw_hist_ptr,                       /* B */
00522                 &acct_ctrl,                                             /* w */
00523                 /* Also "remove_me" field was removed. */
00524                 &logon_divs,                                            /* w */
00525                 &hours_len,                                             /* d */
00526                 &hourslen, &hours,                                      /* B */
00527                 &bad_password_count,                                    /* w */
00528                 &logon_count,                                           /* w */
00529                 &unknown_6);                                            /* d */
00530                 
00531         if (len == (uint32) -1)  {
00532                 ret = False;
00533                 goto done;
00534         }
00535 
00536         pdb_set_logon_time(sampass, logon_time, PDB_SET);
00537         pdb_set_logoff_time(sampass, logoff_time, PDB_SET);
00538         pdb_set_kickoff_time(sampass, kickoff_time, PDB_SET);
00539         pdb_set_bad_password_time(sampass, bad_password_time, PDB_SET);
00540         pdb_set_pass_can_change_time(sampass, pass_can_change_time, PDB_SET);
00541         pdb_set_pass_must_change_time(sampass, pass_must_change_time, PDB_SET);
00542         pdb_set_pass_last_set_time(sampass, pass_last_set_time, PDB_SET);
00543 
00544         pdb_set_username(sampass, username, PDB_SET); 
00545         pdb_set_domain(sampass, domain, PDB_SET);
00546         pdb_set_nt_username(sampass, nt_username, PDB_SET);
00547         pdb_set_fullname(sampass, fullname, PDB_SET);
00548 
00549         if (homedir) {
00550                 fstrcpy( tmpstring, homedir );
00551                 if (expand_explicit) {
00552                         standard_sub_basic( username, domain, tmpstring,
00553                                             sizeof(tmpstring) );
00554                 }
00555                 pdb_set_homedir(sampass, tmpstring, PDB_SET);
00556         }
00557         else {
00558                 pdb_set_homedir(sampass, 
00559                         talloc_sub_basic(sampass, username, domain,
00560                                          lp_logon_home()),
00561                         PDB_DEFAULT);
00562         }
00563 
00564         if (dir_drive)  
00565                 pdb_set_dir_drive(sampass, dir_drive, PDB_SET);
00566         else
00567                 pdb_set_dir_drive(sampass, lp_logon_drive(), PDB_DEFAULT );
00568 
00569         if (logon_script) {
00570                 fstrcpy( tmpstring, logon_script );
00571                 if (expand_explicit) {
00572                         standard_sub_basic( username, domain, tmpstring,
00573                                             sizeof(tmpstring) );
00574                 }
00575                 pdb_set_logon_script(sampass, tmpstring, PDB_SET);
00576         }
00577         else {
00578                 pdb_set_logon_script(sampass, 
00579                         talloc_sub_basic(sampass, username, domain,
00580                                          lp_logon_script()),
00581                         PDB_DEFAULT);
00582         }
00583         
00584         if (profile_path) {     
00585                 fstrcpy( tmpstring, profile_path );
00586                 if (expand_explicit) {
00587                         standard_sub_basic( username, domain, tmpstring,
00588                                             sizeof(tmpstring) );
00589                 }
00590                 pdb_set_profile_path(sampass, tmpstring, PDB_SET);
00591         } 
00592         else {
00593                 pdb_set_profile_path(sampass, 
00594                         talloc_sub_basic(sampass, username, domain,
00595                                          lp_logon_path()),
00596                         PDB_DEFAULT);
00597         }
00598 
00599         pdb_set_acct_desc(sampass, acct_desc, PDB_SET);
00600         pdb_set_workstations(sampass, workstations, PDB_SET);
00601         pdb_set_munged_dial(sampass, munged_dial, PDB_SET);
00602 
00603         if (lm_pw_ptr && lm_pw_len == LM_HASH_LEN) {
00604                 if (!pdb_set_lanman_passwd(sampass, lm_pw_ptr, PDB_SET)) {
00605                         ret = False;
00606                         goto done;
00607                 }
00608         }
00609 
00610         if (nt_pw_ptr && nt_pw_len == NT_HASH_LEN) {
00611                 if (!pdb_set_nt_passwd(sampass, nt_pw_ptr, PDB_SET)) {
00612                         ret = False;
00613                         goto done;
00614                 }
00615         }
00616 
00617         /* Change from V1 is addition of password history field. */
00618         pdb_get_account_policy(AP_PASSWORD_HISTORY, &pwHistLen);
00619         if (pwHistLen) {
00620                 uint8 *pw_hist = SMB_MALLOC_ARRAY(uint8, pwHistLen * PW_HISTORY_ENTRY_LEN);
00621                 if (!pw_hist) {
00622                         ret = False;
00623                         goto done;
00624                 }
00625                 memset(pw_hist, '\0', pwHistLen * PW_HISTORY_ENTRY_LEN);
00626                 if (nt_pw_hist_ptr && nt_pw_hist_len) {
00627                         int i;
00628                         SMB_ASSERT((nt_pw_hist_len % PW_HISTORY_ENTRY_LEN) == 0);
00629                         nt_pw_hist_len /= PW_HISTORY_ENTRY_LEN;
00630                         for (i = 0; (i < pwHistLen) && (i < nt_pw_hist_len); i++) {
00631                                 memcpy(&pw_hist[i*PW_HISTORY_ENTRY_LEN],
00632                                         &nt_pw_hist_ptr[i*PW_HISTORY_ENTRY_LEN],
00633                                         PW_HISTORY_ENTRY_LEN);
00634                         }
00635                 }
00636                 if (!pdb_set_pw_history(sampass, pw_hist, pwHistLen, PDB_SET)) {
00637                         SAFE_FREE(pw_hist);
00638                         ret = False;
00639                         goto done;
00640                 }
00641                 SAFE_FREE(pw_hist);
00642         } else {
00643                 pdb_set_pw_history(sampass, NULL, 0, PDB_SET);
00644         }
00645 
00646         pdb_set_user_sid_from_rid(sampass, user_rid, PDB_SET);
00647         pdb_set_group_sid_from_rid(sampass, group_rid, PDB_SET);
00648         pdb_set_hours_len(sampass, hours_len, PDB_SET);
00649         pdb_set_bad_password_count(sampass, bad_password_count, PDB_SET);
00650         pdb_set_logon_count(sampass, logon_count, PDB_SET);
00651         pdb_set_unknown_6(sampass, unknown_6, PDB_SET);
00652         pdb_set_acct_ctrl(sampass, acct_ctrl, PDB_SET);
00653         pdb_set_logon_divs(sampass, logon_divs, PDB_SET);
00654         pdb_set_hours(sampass, hours, PDB_SET);
00655 
00656 done:
00657 
00658         SAFE_FREE(username);
00659         SAFE_FREE(domain);
00660         SAFE_FREE(nt_username);
00661         SAFE_FREE(fullname);
00662         SAFE_FREE(homedir);
00663         SAFE_FREE(dir_drive);
00664         SAFE_FREE(logon_script);
00665         SAFE_FREE(profile_path);
00666         SAFE_FREE(acct_desc);
00667         SAFE_FREE(workstations);
00668         SAFE_FREE(munged_dial);
00669         SAFE_FREE(unknown_str);
00670         SAFE_FREE(lm_pw_ptr);
00671         SAFE_FREE(nt_pw_ptr);
00672         SAFE_FREE(nt_pw_hist_ptr);
00673         SAFE_FREE(hours);
00674 
00675         return ret;
00676 }

static BOOL init_sam_from_buffer ( struct samu sampass,
uint8 *  buf,
uint32  buflen 
) [static]

pdb_tdb.c683 行で定義されています。

参照先 init_sam_from_buffer_v3().

参照元 tdbsam_getsampwent()tdbsam_getsampwnam().

00684 {
00685         return init_sam_from_buffer_v3(sampass, buf, buflen);
00686 }

static uint32 init_buffer_from_sam ( uint8 **  buf,
struct samu sampass,
BOOL  size_only 
) [static]

pdb_tdb.c692 行で定義されています。

参照先 init_buffer_from_sam_v3().

参照元 tdb_update_samacct_only()tdbsam_convert().

00693 {
00694         return init_buffer_from_sam_v3(buf, sampass, size_only);
00695 }

static BOOL tdbsam_convert ( int32  from  )  [static]

pdb_tdb.c701 行で定義されています。

参照先 bufTDB_DATA::dptrTDB_DATA::dsizeinit_buffer_from_sam()init_sam_from_buffer_v0()init_sam_from_buffer_v1()init_sam_from_buffer_v2()init_sam_from_buffer_v3()pwent_list::keysamu_new()tdb_fetch()tdb_firstkey()tdb_lock_bystring()tdb_nextkey()tdb_store()tdb_store_int32()TDB_SUCCESStdb_unlock_bystring()tdbsam.

参照元 tdbsam_open().

00702 {
00703         const char      *vstring = TDBSAM_VERSION_STRING;
00704         const char      *prefix = USERPREFIX;
00705         TDB_DATA        data, key, old_key;
00706         uint8           *buf = NULL;
00707         BOOL            ret;
00708 
00709         /* handle a Samba upgrade */
00710         tdb_lock_bystring(tdbsam, vstring);
00711         
00712         /* Enumerate all records and convert them */
00713         key = tdb_firstkey(tdbsam);
00714 
00715         while (key.dptr) {
00716         
00717                 /* skip all non-USER entries (eg. RIDs) */
00718                 while ((key.dsize != 0) && (strncmp(key.dptr, prefix, strlen (prefix)))) {
00719                         old_key = key;
00720                         /* increment to next in line */
00721                         key = tdb_nextkey(tdbsam, key);
00722                         SAFE_FREE(old_key.dptr);
00723                 }
00724         
00725                 if (key.dptr) {
00726                         struct samu *user = NULL;
00727 
00728                         /* read from tdbsam */
00729                         data = tdb_fetch(tdbsam, key);
00730                         if (!data.dptr) {
00731                                 DEBUG(0,("tdbsam_convert: database entry not found: %s.\n",key.dptr));
00732                                 return False;
00733                         }
00734         
00735                         /* unpack the buffer from the former format */
00736                         if ( !(user = samu_new( NULL )) ) {
00737                                 DEBUG(0,("tdbsam_convert: samu_new() failed!\n"));
00738                                 SAFE_FREE( data.dptr );
00739                                 return False;
00740                         }
00741                         DEBUG(10,("tdbsam_convert: Try unpacking a record with (key:%s) (version:%d)\n", key.dptr, from));
00742                         switch (from) {
00743                                 case 0:
00744                                         ret = init_sam_from_buffer_v0(user, (uint8 *)data.dptr, data.dsize);
00745                                         break;
00746                                 case 1:
00747                                         ret = init_sam_from_buffer_v1(user, (uint8 *)data.dptr, data.dsize);
00748                                         break;
00749                                 case 2:
00750                                         ret = init_sam_from_buffer_v2(user, (uint8 *)data.dptr, data.dsize);
00751                                         break;
00752                                 case 3:
00753                                         ret = init_sam_from_buffer_v3(user, (uint8 *)data.dptr, data.dsize);
00754                                         break;
00755                                 default:
00756                                         /* unknown tdbsam version */
00757                                         ret = False;
00758                         }
00759                         if (!ret) {
00760                                 DEBUG(0,("tdbsam_convert: Bad struct samu entry returned from TDB (key:%s) (version:%d)\n", key.dptr, from));
00761                                 SAFE_FREE(data.dptr);
00762                                 TALLOC_FREE(user );
00763                                 return False;
00764                         }
00765         
00766                         /* We're finished with the old data. */
00767                         SAFE_FREE(data.dptr);
00768 
00769                         /* pack from the buffer into the new format */
00770                         
00771                         DEBUG(10,("tdbsam_convert: Try packing a record (key:%s) (version:%d)\n", key.dptr, from));
00772                         data.dsize = init_buffer_from_sam (&buf, user, False);
00773                         TALLOC_FREE(user );
00774                         
00775                         if ( data.dsize == -1 ) {
00776                                 DEBUG(0,("tdbsam_convert: cannot pack the struct samu into the new format\n"));
00777                                 return False;
00778                         }
00779                         data.dptr = (char *)buf;
00780                         
00781                         /* Store the buffer inside the TDBSAM */
00782                         if (tdb_store(tdbsam, key, data, TDB_MODIFY) != TDB_SUCCESS) {
00783                                 DEBUG(0,("tdbsam_convert: cannot store the struct samu (key:%s) in new format\n",key.dptr));
00784                                 SAFE_FREE(data.dptr);
00785                                 return False;
00786                         }
00787                         
00788                         SAFE_FREE(data.dptr);
00789                         
00790                         /* increment to next in line */
00791                         old_key = key;
00792                         key = tdb_nextkey(tdbsam, key);
00793                         SAFE_FREE(old_key.dptr);
00794                 }
00795                 
00796         }
00797 
00798         
00799         /* upgrade finished */
00800         tdb_store_int32(tdbsam, vstring, TDBSAM_VERSION);
00801         tdb_unlock_bystring(tdbsam, vstring);
00802 
00803         return(True);   
00804 }

static BOOL tdbsam_open ( const char *  name  )  [static]

pdb_tdb.c811 行で定義されています。

参照先 ref_counttdb_close()tdb_fetch_int32()tdb_open_log()tdbsamtdbsam_convert().

参照元 tdb_update_sam()tdbsam_delete_sam_account()tdbsam_getsampwnam()tdbsam_getsampwrid()tdbsam_rename_sam_account()tdbsam_setsampwent().

00812 {
00813         int32   version;
00814         
00815         /* check if we are already open */
00816         
00817         if ( tdbsam ) {
00818                 ref_count++;
00819                 DEBUG(8,("tdbsam_open: Incrementing open reference count.  Ref count is now %d\n", 
00820                         ref_count));
00821                 return True;
00822         }
00823         
00824         SMB_ASSERT( ref_count == 0 );
00825         
00826         /* Try to open tdb passwd.  Create a new one if necessary */
00827         
00828         if (!(tdbsam = tdb_open_log(name, 0, TDB_DEFAULT, O_CREAT|O_RDWR, 0600))) {
00829                 DEBUG(0, ("tdbsam_open: Failed to open/create TDB passwd [%s]\n", name));
00830                 return False;
00831         }
00832 
00833         /* set the initial reference count - must be done before tdbsam_convert
00834            as that calls tdbsam_open()/tdbsam_close(). */
00835 
00836         ref_count = 1;
00837 
00838         /* Check the version */
00839         version = tdb_fetch_int32( tdbsam, TDBSAM_VERSION_STRING );
00840         
00841         if (version == -1) {
00842                 version = 0;    /* Version not found, assume version 0 */
00843         }
00844         
00845         /* Compare the version */
00846         if (version > TDBSAM_VERSION) {
00847                 /* Version more recent than the latest known */ 
00848                 DEBUG(0, ("tdbsam_open: unknown version => %d\n", version));
00849                 tdb_close( tdbsam );
00850                 ref_count = 0;
00851                 return False;
00852         } 
00853         
00854         
00855         if ( version < TDBSAM_VERSION ) {       
00856                 DEBUG(1, ("tdbsam_open: Converting version %d database to version %d.\n", 
00857                         version, TDBSAM_VERSION));
00858                 
00859                 if ( !tdbsam_convert(version) ) {
00860                         DEBUG(0, ("tdbsam_open: Error when trying to convert tdbsam [%s]\n",name));
00861                         tdb_close(tdbsam);
00862                         ref_count = 0;
00863                         return False;
00864                 }
00865                         
00866                 DEBUG(3, ("TDBSAM converted successfully.\n"));
00867         }
00868         
00869         DEBUG(4,("tdbsam_open: successfully opened %s\n", name ));      
00870         
00871         return True;
00872 }

void tdbsam_close ( void   ) 

pdb_tdb.c878 行で定義されています。

参照先 ref_counttdb_close()tdbsam.

参照元 tdb_update_sam()tdbsam_delete_sam_account()tdbsam_endsampwent()tdbsam_getsampwnam()tdbsam_getsampwrid()tdbsam_rename_sam_account().

00879 {
00880         ref_count--;
00881         
00882         DEBUG(8,("tdbsam_close: Reference count is now %d.\n", ref_count));
00883 
00884         SMB_ASSERT(ref_count >= 0 );
00885         
00886         if ( ref_count == 0 ) {
00887                 tdb_close( tdbsam );
00888                 tdbsam = NULL;
00889         }
00890         
00891         return;
00892 }

static int tdbsam_traverse_setpwent ( TDB_CONTEXT t,
TDB_DATA  key,
TDB_DATA  data,
void *  state 
) [static]

pdb_tdb.c898 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizepwent_list::keymemdup()tdbsam_pwent_list.

参照元 tdbsam_setsampwent().

00899 {
00900         const char *prefix = USERPREFIX;
00901         int  prefixlen = strlen (prefix);
00902         struct pwent_list *ptr;
00903         
00904         if ( strncmp(key.dptr, prefix, prefixlen) == 0 ) {
00905                 if ( !(ptr=SMB_MALLOC_P(struct pwent_list)) ) {
00906                         DEBUG(0,("tdbsam_traverse_setpwent: Failed to malloc new entry for list\n"));
00907                         
00908                         /* just return 0 and let the traversal continue */
00909                         return 0;
00910                 }
00911                 ZERO_STRUCTP(ptr);
00912                 
00913                 /* save a copy of the key */
00914                 
00915                 ptr->key.dptr = (char *)memdup( key.dptr, key.dsize );
00916                 if (!ptr->key.dptr) {
00917                         DEBUG(0,("tdbsam_traverse_setpwent: memdup failed\n"));
00918                         /* just return 0 and let the traversal continue */
00919                         SAFE_FREE(ptr);
00920                         return 0;
00921                 }
00922 
00923                 ptr->key.dsize = key.dsize;
00924                 
00925                 DLIST_ADD( tdbsam_pwent_list, ptr );
00926         
00927         }
00928         
00929         return 0;
00930 }

static NTSTATUS tdbsam_setsampwent ( struct pdb_methods my_methods,
BOOL  update,
uint32  acb_mask 
) [static]

pdb_tdb.c937 行で定義されています。

参照先 pwent_initializedtdb_traverse()tdbsamtdbsam_filenametdbsam_open()tdbsam_traverse_setpwent().

参照元 pdb_init_tdbsam().

00938 {
00939         if ( !tdbsam_open( tdbsam_filename ) ) {
00940                 DEBUG(0,("tdbsam_getsampwnam: failed to open %s!\n", tdbsam_filename));
00941                 return NT_STATUS_ACCESS_DENIED;
00942         }
00943 
00944         tdb_traverse( tdbsam, tdbsam_traverse_setpwent, NULL );
00945         pwent_initialized = True;
00946 
00947         return NT_STATUS_OK;
00948 }

static void tdbsam_endsampwent ( struct pdb_methods my_methods  )  [static]

pdb_tdb.c955 行で定義されています。

参照先 TDB_DATA::dptrpwent_list::keypwent_list::nextpwent_initializedtdbsam_close()tdbsam_pwent_list.

参照元 pdb_init_tdbsam()tdb_update_sam()tdbsam_rename_sam_account().

00956 {
00957         struct pwent_list *ptr, *ptr_next;
00958         
00959         /* close the tdb only if we have a valid pwent state */
00960         
00961         if ( pwent_initialized ) {
00962                 DEBUG(7, ("endtdbpwent: closed sam database.\n"));
00963                 tdbsam_close();
00964         }
00965         
00966         /* clear out any remaining entries in the list */
00967         
00968         for ( ptr=tdbsam_pwent_list; ptr; ptr = ptr_next ) {
00969                 ptr_next = ptr->next;
00970                 DLIST_REMOVE( tdbsam_pwent_list, ptr );
00971                 SAFE_FREE( ptr->key.dptr);
00972                 SAFE_FREE( ptr );
00973         }       
00974         
00975         pwent_initialized = False;
00976 }

static NTSTATUS tdbsam_getsampwent ( struct pdb_methods my_methods,
struct samu user 
) [static]

pdb_tdb.c982 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizeinit_sam_from_buffer()pwent_list::keytdb_fetch()tdbsamtdbsam_pwent_list.

参照元 pdb_init_tdbsam().

00983 {
00984         NTSTATUS                nt_status = NT_STATUS_UNSUCCESSFUL;
00985         TDB_DATA                data;
00986         struct pwent_list       *pkey;
00987 
00988         if ( !user ) {
00989                 DEBUG(0,("tdbsam_getsampwent: struct samu is NULL.\n"));
00990                 return nt_status;
00991         }
00992 
00993         if ( !tdbsam_pwent_list ) {
00994                 DEBUG(4,("tdbsam_getsampwent: end of list\n"));
00995                 return nt_status;
00996         }
00997         
00998         /* pull the next entry */
00999                 
01000         pkey = tdbsam_pwent_list;
01001         DLIST_REMOVE( tdbsam_pwent_list, pkey );
01002         
01003         data = tdb_fetch(tdbsam, pkey->key);
01004 
01005         SAFE_FREE( pkey->key.dptr);
01006         SAFE_FREE( pkey);
01007         
01008         if ( !data.dptr ) {
01009                 DEBUG(5,("pdb_getsampwent: database entry not found.  Was the user deleted?\n"));
01010                 return nt_status;
01011         }
01012   
01013         if ( !init_sam_from_buffer(user, (unsigned char *)data.dptr, data.dsize) ) {
01014                 DEBUG(0,("pdb_getsampwent: Bad struct samu entry returned from TDB!\n"));
01015         }
01016         
01017         SAFE_FREE( data.dptr );
01018 
01019         return NT_STATUS_OK;
01020 }

static NTSTATUS tdbsam_getsampwnam ( struct pdb_methods my_methods,
struct samu user,
const char *  sname 
) [static]

pdb_tdb.c1026 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizeinit_sam_from_buffer()pwent_list::keynamestrlower_m()tdb_errorstr()tdb_fetch()tdbsamtdbsam_close()tdbsam_filenametdbsam_open().

参照元 pdb_init_tdbsam()tdbsam_getsampwrid().

01027 {
01028         TDB_DATA        data, key;
01029         fstring         keystr;
01030         fstring         name;
01031 
01032         if ( !user ) {
01033                 DEBUG(0,("pdb_getsampwnam: struct samu is NULL.\n"));
01034                 return NT_STATUS_NO_MEMORY;
01035         }
01036 
01037         /* Data is stored in all lower-case */
01038         fstrcpy(name, sname);
01039         strlower_m(name);
01040 
01041         /* set search key */
01042         slprintf(keystr, sizeof(keystr)-1, "%s%s", USERPREFIX, name);
01043         key.dptr = keystr;
01044         key.dsize = strlen(keystr) + 1;
01045 
01046         /* open the database */
01047                 
01048         if ( !tdbsam_open( tdbsam_filename ) ) {
01049                 DEBUG(0,("tdbsam_getsampwnam: failed to open %s!\n", tdbsam_filename));
01050                 return NT_STATUS_ACCESS_DENIED;
01051         }
01052         
01053         /* get the record */
01054         
01055         data = tdb_fetch(tdbsam, key);
01056         if (!data.dptr) {
01057                 DEBUG(5,("pdb_getsampwnam (TDB): error fetching database.\n"));
01058                 DEBUGADD(5, (" Error: %s\n", tdb_errorstr(tdbsam)));
01059                 DEBUGADD(5, (" Key: %s\n", keystr));
01060                 tdbsam_close();
01061                 return NT_STATUS_NO_SUCH_USER;
01062         }
01063   
01064         /* unpack the buffer */
01065         
01066         if (!init_sam_from_buffer(user, (unsigned char *)data.dptr, data.dsize)) {
01067                 DEBUG(0,("pdb_getsampwent: Bad struct samu entry returned from TDB!\n"));
01068                 SAFE_FREE(data.dptr);
01069                 tdbsam_close();
01070                 return NT_STATUS_NO_MEMORY;
01071         }
01072         
01073         /* success */
01074         
01075         SAFE_FREE(data.dptr);
01076         tdbsam_close();
01077         
01078         return NT_STATUS_OK;
01079 }

static NTSTATUS tdbsam_getsampwrid ( struct pdb_methods my_methods,
struct samu user,
uint32  rid 
) [static]

pdb_tdb.c1085 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizepwent_list::keynametdb_errorstr()tdb_fetch()tdbsamtdbsam_close()tdbsam_filenametdbsam_getsampwnam()tdbsam_open().

参照元 tdbsam_getsampwsid().

01086 {
01087         NTSTATUS                nt_status = NT_STATUS_UNSUCCESSFUL;
01088         TDB_DATA                data, key;
01089         fstring                 keystr;
01090         fstring                 name;
01091 
01092         if ( !user ) {
01093                 DEBUG(0,("pdb_getsampwrid: struct samu is NULL.\n"));
01094                 return nt_status;
01095         }
01096         
01097         /* set search key */
01098         
01099         slprintf(keystr, sizeof(keystr)-1, "%s%.8x", RIDPREFIX, rid);
01100         key.dptr = keystr;
01101         key.dsize = strlen (keystr) + 1;
01102 
01103         /* open the database */
01104                 
01105         if ( !tdbsam_open( tdbsam_filename ) ) {
01106                 DEBUG(0,("tdbsam_getsampwnam: failed to open %s!\n", tdbsam_filename));
01107                 return NT_STATUS_ACCESS_DENIED;
01108         }
01109 
01110         /* get the record */
01111         
01112         data = tdb_fetch (tdbsam, key);
01113         if (!data.dptr) {
01114                 DEBUG(5,("pdb_getsampwrid (TDB): error looking up RID %d by key %s.\n", rid, keystr));
01115                 DEBUGADD(5, (" Error: %s\n", tdb_errorstr(tdbsam)));
01116                 nt_status = NT_STATUS_UNSUCCESSFUL;
01117                 goto done;
01118         }
01119 
01120         fstrcpy(name, data.dptr);
01121         SAFE_FREE(data.dptr);
01122         
01123         nt_status = tdbsam_getsampwnam (my_methods, user, name);
01124 
01125  done:
01126         /* cleanup */
01127         
01128         tdbsam_close();
01129                 
01130         return nt_status;
01131 }

static NTSTATUS tdbsam_getsampwsid ( struct pdb_methods my_methods,
struct samu user,
const DOM_SID sid 
) [static]

pdb_tdb.c1133 行で定義されています。

参照先 get_global_sam_sid()sid_peek_check_rid()tdbsam_getsampwrid().

参照元 pdb_init_tdbsam().

01134 {
01135         uint32 rid;
01136         
01137         if ( !sid_peek_check_rid(get_global_sam_sid(), sid, &rid) )
01138                 return NT_STATUS_UNSUCCESSFUL;
01139 
01140         return tdbsam_getsampwrid(my_methods, user, rid);
01141 }

static BOOL tdb_delete_samacct_only ( struct samu sam_pass  )  [static]

pdb_tdb.c1143 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizepwent_list::keynamepdb_get_username()strlower_m()tdb_delete()tdb_errorstr()TDB_SUCCESStdbsam.

参照元 tdbsam_rename_sam_account().

01144 {
01145         TDB_DATA        key;
01146         fstring         keystr;
01147         fstring         name;
01148 
01149         fstrcpy(name, pdb_get_username(sam_pass));
01150         strlower_m(name);
01151         
01152         /* set the search key */
01153         
01154         slprintf(keystr, sizeof(keystr)-1, "%s%s", USERPREFIX, name);
01155         key.dptr = keystr;
01156         key.dsize = strlen (keystr) + 1;
01157         
01158         /* it's outaa here!  8^) */
01159         
01160         if (tdb_delete(tdbsam, key) != TDB_SUCCESS) {
01161                 DEBUG(5, ("Error deleting entry from tdb passwd database!\n"));
01162                 DEBUGADD(5, (" Error: %s\n", tdb_errorstr(tdbsam)));
01163                 return False;
01164         }
01165         
01166         return True;
01167 }

static NTSTATUS tdbsam_delete_sam_account ( struct pdb_methods my_methods,
struct samu sam_pass 
) [static]

pdb_tdb.c1173 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizepwent_list::keynamepdb_get_user_rid()pdb_get_username()strlower_m()tdb_delete()tdb_errorstr()TDB_SUCCESStdbsamtdbsam_close()tdbsam_filenametdbsam_open().

参照元 pdb_init_tdbsam().

01174 {
01175         NTSTATUS        nt_status = NT_STATUS_UNSUCCESSFUL;
01176         TDB_DATA        key;
01177         fstring         keystr;
01178         uint32          rid;
01179         fstring         name;
01180         
01181         /* open the database */
01182                 
01183         if ( !tdbsam_open( tdbsam_filename ) ) {
01184                 DEBUG(0,("tdbsam_delete_sam_account: failed to open %s!\n",
01185                          tdbsam_filename));
01186                 return NT_STATUS_ACCESS_DENIED;
01187         }
01188 
01189         fstrcpy(name, pdb_get_username(sam_pass));
01190         strlower_m(name);
01191         
01192         /* set the search key */
01193 
01194         slprintf(keystr, sizeof(keystr)-1, "%s%s", USERPREFIX, name);
01195         key.dptr = keystr;
01196         key.dsize = strlen (keystr) + 1;
01197         
01198         rid = pdb_get_user_rid(sam_pass);
01199 
01200         /* it's outaa here!  8^) */
01201 
01202         if ( tdb_delete(tdbsam, key) != TDB_SUCCESS ) {
01203                 DEBUG(5, ("Error deleting entry from tdb passwd database!\n"));
01204                 DEBUGADD(5, (" Error: %s\n", tdb_errorstr(tdbsam)));
01205                 nt_status = NT_STATUS_UNSUCCESSFUL;
01206                 goto done;
01207         }
01208 
01209         /* set the search key */
01210         
01211         slprintf(keystr, sizeof(keystr)-1, "%s%.8x", RIDPREFIX, rid);
01212         key.dptr = keystr;
01213         key.dsize = strlen (keystr) + 1;
01214 
01215         /* it's outaa here!  8^) */
01216         
01217         if ( tdb_delete(tdbsam, key) != TDB_SUCCESS ) {
01218                 DEBUG(5, ("Error deleting entry from tdb rid database!\n"));
01219                 DEBUGADD(5, (" Error: %s\n", tdb_errorstr(tdbsam)));
01220                 nt_status = NT_STATUS_UNSUCCESSFUL;
01221                 goto done;
01222         }
01223 
01224         nt_status = NT_STATUS_OK;
01225         
01226  done:
01227         tdbsam_close();
01228         
01229         return nt_status;
01230 }

static BOOL tdb_update_samacct_only ( struct samu newpwd,
int  flag 
) [static]

pdb_tdb.c1237 行で定義されています。

参照先 bufTDB_DATA::dptrTDB_DATA::dsizeinit_buffer_from_sam()pwent_list::keynamepdb_get_user_rid()pdb_get_username()strlower_m()tdb_errorstr()tdb_store()TDB_SUCCESStdbsam.

参照元 tdb_update_sam()tdbsam_rename_sam_account().

01238 {
01239         TDB_DATA        key, data;
01240         uint8           *buf = NULL;
01241         fstring         keystr;
01242         fstring         name;
01243         BOOL            ret = True;
01244 
01245         /* copy the struct samu struct into a BYTE buffer for storage */
01246         
01247         if ( (data.dsize=init_buffer_from_sam (&buf, newpwd, False)) == -1 ) {
01248                 DEBUG(0,("tdb_update_sam: ERROR - Unable to copy struct samu info BYTE buffer!\n"));
01249                 ret = False;
01250                 goto done;
01251         }
01252         data.dptr = (char *)buf;
01253 
01254         fstrcpy(name, pdb_get_username(newpwd));
01255         strlower_m(name);
01256         
01257         DEBUG(5, ("Storing %saccount %s with RID %d\n", 
01258                   flag == TDB_INSERT ? "(new) " : "", name, 
01259                   pdb_get_user_rid(newpwd)));
01260 
01261         /* setup the USER index key */
01262         slprintf(keystr, sizeof(keystr)-1, "%s%s", USERPREFIX, name);
01263         key.dptr = keystr;
01264         key.dsize = strlen(keystr) + 1;
01265 
01266         /* add the account */
01267         
01268         if ( tdb_store(tdbsam, key, data, flag) != TDB_SUCCESS ) {
01269                 DEBUG(0, ("Unable to modify passwd TDB!"));
01270                 DEBUGADD(0, (" Error: %s", tdb_errorstr(tdbsam)));
01271                 DEBUGADD(0, (" occured while storing the main record (%s)\n",
01272                              keystr));
01273                 ret = False;
01274                 goto done;
01275         }
01276 
01277 done:   
01278         /* cleanup */
01279         SAFE_FREE(buf);
01280         
01281         return ret;
01282 }

static BOOL tdb_update_ridrec_only ( struct samu newpwd,
int  flag 
) [static]

pdb_tdb.c1288 行で定義されています。

参照先 TDB_DATA::dptrTDB_DATA::dsizepwent_list::keynamepdb_get_user_rid()pdb_get_username()strlower_m()tdb_errorstr()tdb_store()TDB_SUCCESStdbsam.

参照元 tdb_update_sam()tdbsam_rename_sam_account().

01289 {
01290         TDB_DATA        key, data;
01291         fstring         keystr;
01292         fstring         name;
01293 
01294         fstrcpy(name, pdb_get_username(newpwd));
01295         strlower_m(name);
01296 
01297         /* setup RID data */
01298         data.dsize = strlen(name) + 1;
01299         data.dptr = name;
01300 
01301         /* setup the RID index key */
01302         slprintf(keystr, sizeof(keystr)-1, "%s%.8x", RIDPREFIX,  pdb_get_user_rid(newpwd));
01303         key.dptr = keystr;
01304         key.dsize = strlen (keystr) + 1;
01305         
01306         /* add the reference */
01307         if (tdb_store(tdbsam, key, data, flag) != TDB_SUCCESS) {
01308                 DEBUG(0, ("Unable to modify TDB passwd !"));
01309                 DEBUGADD(0, (" Error: %s\n", tdb_errorstr(tdbsam)));
01310                 DEBUGADD(0, (" occured while storing the RID index (%s)\n", keystr));
01311                 return False;
01312         }
01313 
01314         return True;
01315 
01316 }

static BOOL tdb_update_sam ( struct pdb_methods my_methods,
struct samu newpwd,
int  flag 
) [static]

pdb_tdb.c1322 行で定義されています。

参照先 pdb_get_group_rid()pdb_get_user_rid()pdb_get_username()resulttdb_update_ridrec_only()tdb_update_samacct_only()tdbsam_close()tdbsam_endsampwent()tdbsam_filenametdbsam_open().

参照元 tdbsam_add_sam_account()tdbsam_update_sam_account().

01323 {
01324         BOOL            result = True;
01325 
01326         /* invalidate the existing TDB iterator if it is open */
01327         
01328         tdbsam_endsampwent( my_methods );
01329         
01330 #if 0 
01331         if ( !pdb_get_group_rid(newpwd) ) {
01332                 DEBUG (0,("tdb_update_sam: Failing to store a struct samu for [%s] "
01333                         "without a primary group RID\n", pdb_get_username(newpwd)));
01334                 return False;
01335         }
01336 #endif
01337 
01338         if (!pdb_get_user_rid(newpwd)) {
01339                 DEBUG(0,("tdb_update_sam: struct samu (%s) with no RID!\n", pdb_get_username(newpwd)));
01340                 return False;
01341         }
01342 
01343         /* open the database */
01344                 
01345         if ( !tdbsam_open( tdbsam_filename ) ) {
01346                 DEBUG(0,("tdbsam_getsampwnam: failed to open %s!\n", tdbsam_filename));
01347                 return False;
01348         }
01349         
01350         if ( !tdb_update_samacct_only(newpwd, flag) || !tdb_update_ridrec_only(newpwd, flag)) {
01351                 result = False;
01352         }
01353 
01354         /* cleanup */
01355 
01356         tdbsam_close();
01357         
01358         return result;  
01359 }

static NTSTATUS tdbsam_update_sam_account ( struct pdb_methods my_methods,
struct samu newpwd 
) [static]

pdb_tdb.c1365 行で定義されています。

参照先 tdb_update_sam().

参照元 pdb_init_tdbsam().

01366 {
01367         if ( !tdb_update_sam(my_methods, newpwd, TDB_MODIFY) )
01368                 return NT_STATUS_UNSUCCESSFUL;
01369         
01370         return NT_STATUS_OK;
01371 }

static NTSTATUS tdbsam_add_sam_account ( struct pdb_methods my_methods,
struct samu newpwd 
) [static]

pdb_tdb.c1377 行で定義されています。

参照先 tdb_update_sam().

参照元 pdb_init_tdbsam().

01378 {
01379         if ( !tdb_update_sam(my_methods, newpwd, TDB_INSERT) )
01380                 return NT_STATUS_UNSUCCESSFUL;
01381                 
01382         return NT_STATUS_OK;
01383 }

static NTSTATUS tdbsam_rename_sam_account ( struct pdb_methods my_methods,
struct samu old_acct,
const char *  newname 
) [static]

pdb_tdb.c1394 行で定義されています。

参照先 PDB_CHANGEDpdb_copy_sam_account()pdb_get_username()pdb_set_username()samu_new()smb_nscd_flush_user_cache()smbrun()string_sub2()strlower_m()tdb_delete_samacct_only()tdb_lock_bystring_with_timeout()tdb_unlock_bystring()tdb_update_ridrec_only()tdb_update_samacct_only()tdbsamtdbsam_close()tdbsam_endsampwent()tdbsam_filenametdbsam_open().

参照元 pdb_init_tdbsam().

01397 {
01398         struct samu      *new_acct = NULL;
01399         pstring          rename_script;
01400         BOOL             interim_account = False;
01401         int              rename_ret;
01402         fstring          oldname_lower;
01403         fstring          newname_lower;
01404 
01405         /* can't do anything without an external script */
01406         
01407         pstrcpy(rename_script, lp_renameuser_script() );
01408         if ( ! *rename_script ) {
01409                 return NT_STATUS_ACCESS_DENIED;
01410         }
01411 
01412         /* invalidate the existing TDB iterator if it is open */
01413         
01414         tdbsam_endsampwent( my_methods );
01415 
01416         if ( !(new_acct = samu_new( NULL )) ) {
01417                 return NT_STATUS_NO_MEMORY;
01418         }
01419         
01420         if ( !pdb_copy_sam_account(new_acct, old_acct) 
01421                 || !pdb_set_username(new_acct, newname, PDB_CHANGED)) 
01422         {
01423                 TALLOC_FREE(new_acct );
01424                 return NT_STATUS_NO_MEMORY;
01425         }
01426 
01427         /* open the database */
01428                 
01429         if ( !tdbsam_open( tdbsam_filename ) ) {
01430                 DEBUG(0,("tdbsam_getsampwnam: failed to open %s!\n", tdbsam_filename));
01431                 TALLOC_FREE(new_acct );
01432                 return NT_STATUS_ACCESS_DENIED;
01433         }
01434 
01435         /* add the new account and lock it */
01436         
01437         if ( !tdb_update_samacct_only(new_acct, TDB_INSERT) ) {
01438                 goto done;
01439         }
01440         
01441         interim_account = True;
01442 
01443         if ( tdb_lock_bystring_with_timeout(tdbsam, newname, 30) == -1 ) {
01444                 goto done;
01445         }
01446 
01447         /* Rename the posix user.  Follow the semantics of _samr_create_user()
01448            so that we lower case the posix name but preserve the case in passdb */
01449 
01450         fstrcpy( oldname_lower, pdb_get_username(old_acct) );
01451         strlower_m( oldname_lower );
01452 
01453         fstrcpy( newname_lower, newname );
01454         strlower_m( newname_lower );
01455 
01456         string_sub2(rename_script, "%unew", newname_lower, sizeof(pstring), 
01457                 True, False, True);
01458         string_sub2(rename_script, "%uold", oldname_lower, sizeof(pstring), 
01459                 True, False, True);
01460         rename_ret = smbrun(rename_script, NULL);
01461 
01462         DEBUG(rename_ret ? 0 : 3,("Running the command `%s' gave %d\n", rename_script, rename_ret));
01463 
01464         if (rename_ret == 0) {
01465                 smb_nscd_flush_user_cache();
01466         }
01467 
01468         if (rename_ret) {
01469                 goto done; 
01470         }
01471 
01472         /* rewrite the rid->username record */
01473         
01474         if ( !tdb_update_ridrec_only( new_acct, TDB_MODIFY) ) {
01475                 goto done;
01476         }
01477         interim_account = False;
01478         tdb_unlock_bystring( tdbsam, newname );
01479 
01480         tdb_delete_samacct_only( old_acct );
01481         
01482         tdbsam_close();
01483         
01484         TALLOC_FREE(new_acct );
01485         return NT_STATUS_OK;
01486 
01487 done:   
01488         /* cleanup */
01489         if (interim_account) {
01490                 tdb_unlock_bystring(tdbsam, newname);
01491                 tdb_delete_samacct_only(new_acct);
01492         }
01493         
01494         tdbsam_close();
01495         
01496         if (new_acct)
01497                 TALLOC_FREE(new_acct);
01498         
01499         return NT_STATUS_ACCESS_DENIED; 
01500 }

static BOOL tdbsam_rid_algorithm ( struct pdb_methods methods  )  [static]

pdb_tdb.c1502 行で定義されています。

参照元 pdb_init_tdbsam().

01503 {
01504         return False;
01505 }

static BOOL init_idmap_tdb ( TDB_CONTEXT tdb  )  [static]

pdb_tdb.c1523 行で定義されています。

参照先 tdbtdb_fetch_int32()tdb_lock_bystring()tdb_store_int32()tdb_unlock_bystring().

参照元 tdbsam_new_rid().

01524 {
01525         int32 version;
01526 
01527         if (tdb_lock_bystring(tdb, "IDMAP_VERSION") != 0) {
01528                 DEBUG(0, ("Could not lock IDMAP_VERSION\n"));
01529                 return False;
01530         }
01531 
01532         version = tdb_fetch_int32(tdb, "IDMAP_VERSION");
01533 
01534         if (version == -1) {
01535                 /* No key found, must be a new db */
01536                 if (tdb_store_int32(tdb, "IDMAP_VERSION",
01537                                     IDMAP_VERSION) != 0) {
01538                         DEBUG(0, ("Could not store IDMAP_VERSION\n"));
01539                         tdb_unlock_bystring(tdb, "IDMAP_VERSION");
01540                         return False;
01541                 }
01542                 version = IDMAP_VERSION;
01543         }
01544 
01545         if (version != IDMAP_VERSION) {
01546                 DEBUG(0, ("Expected IDMAP_VERSION=%d, found %d. Please "
01547                           "start winbind once\n", IDMAP_VERSION, version));
01548                 tdb_unlock_bystring(tdb, "IDMAP_VERSION");
01549                 return False;
01550         }
01551 
01552         tdb_unlock_bystring(tdb, "IDMAP_VERSION");
01553         return True;
01554 }

static BOOL tdbsam_new_rid ( struct pdb_methods methods,
uint32 *  prid 
) [static]

pdb_tdb.c1556 行で定義されています。

参照先 errnoinit_idmap_tdb()lock_path()smb_panic()strerror()tdbtdb_change_uint32_atomic()tdb_close()tdb_open_log().

参照元 pdb_init_tdbsam().

01557 {
01558         TDB_CONTEXT *tdb;
01559         uint32 rid;
01560         BOOL ret = False;
01561 
01562         tdb = tdb_open_log(lock_path("winbindd_idmap.tdb"), 0,
01563                            TDB_DEFAULT, O_RDWR | O_CREAT, 0644);
01564 
01565         if (tdb == NULL) {
01566                 DEBUG(1, ("Could not open idmap: %s\n", strerror(errno)));
01567                 goto done;
01568         }
01569 
01570         if (!init_idmap_tdb(tdb)) {
01571                 DEBUG(1, ("Could not init idmap\n"));
01572                 goto done;
01573         }
01574 
01575         rid = BASE_RID;         /* Default if not set */
01576 
01577         if (!tdb_change_uint32_atomic(tdb, "RID_COUNTER", &rid, 1)) {
01578                 DEBUG(3, ("tdbsam_new_rid: Failed to increase RID_COUNTER\n"));
01579                 goto done;
01580         }
01581 
01582         *prid = rid;
01583         ret = True;
01584 
01585  done:
01586         if ((tdb != NULL) && (tdb_close(tdb) != 0)) {
01587                 smb_panic("tdb_close(idmap_tdb) failed\n");
01588         }
01589 
01590         return ret;
01591 }

static NTSTATUS pdb_init_tdbsam ( struct pdb_methods **  pdb_method,
const char *  location 
) [static]

pdb_tdb.c1598 行で定義されています。

参照先 make_pdb_method()pstr_sprintf()tdbsam_add_sam_account()tdbsam_delete_sam_account()tdbsam_endsampwent()tdbsam_filenametdbsam_getsampwent()tdbsam_getsampwnam()tdbsam_getsampwsid()tdbsam_new_rid()tdbsam_rename_sam_account()tdbsam_rid_algorithm()tdbsam_setsampwent()tdbsam_update_sam_account().

参照元 pdb_tdbsam_init().

01599 {
01600         NTSTATUS nt_status;
01601         pstring tdbfile;
01602         const char *pfile = location;
01603 
01604         if (!NT_STATUS_IS_OK(nt_status = make_pdb_method( pdb_method ))) {
01605                 return nt_status;
01606         }
01607 
01608         (*pdb_method)->name = "tdbsam";
01609 
01610         (*pdb_method)->setsampwent = tdbsam_setsampwent;
01611         (*pdb_method)->endsampwent = tdbsam_endsampwent;
01612         (*pdb_method)->getsampwent = tdbsam_getsampwent;
01613         (*pdb_method)->getsampwnam = tdbsam_getsampwnam;
01614         (*pdb_method)->getsampwsid = tdbsam_getsampwsid;
01615         (*pdb_method)->add_sam_account = tdbsam_add_sam_account;
01616         (*pdb_method)->update_sam_account = tdbsam_update_sam_account;
01617         (*pdb_method)->delete_sam_account = tdbsam_delete_sam_account;
01618         (*pdb_method)->rename_sam_account = tdbsam_rename_sam_account;
01619 
01620         (*pdb_method)->rid_algorithm = tdbsam_rid_algorithm;
01621         (*pdb_method)->new_rid = tdbsam_new_rid;
01622 
01623         /* save the path for later */
01624                            
01625         if ( !location ) {
01626                 pstr_sprintf( tdbfile, "%s/%s", lp_private_dir(), PASSDB_FILE_NAME );
01627                 pfile = tdbfile;
01628         }
01629         pstrcpy( tdbsam_filename, pfile );
01630 
01631         /* no private data */
01632         
01633         (*pdb_method)->private_data      = NULL;
01634         (*pdb_method)->free_private_data = NULL;
01635 
01636         return NT_STATUS_OK;
01637 }

NTSTATUS pdb_tdbsam_init ( void   ) 

pdb_tdb.c1639 行で定義されています。

参照先 pdb_init_tdbsam()smb_register_passdb().

01640 {
01641         return smb_register_passdb(PASSDB_INTERFACE_VERSION, "tdbsam", pdb_init_tdbsam);
01642 }


変数

int tdbsam_debug_level = DBGC_ALL [static]

pdb_tdb.c30 行で定義されています。

struct pwent_list* tdbsam_pwent_list [static]

pdb_tdb.c52 行で定義されています。

参照元 tdbsam_endsampwent()tdbsam_getsampwent()tdbsam_traverse_setpwent().

BOOL pwent_initialized [static]

pdb_tdb.c53 行で定義されています。

参照元 tdbsam_endsampwent()tdbsam_setsampwent().

TDB_CONTEXT* tdbsam [static]

pdb_tdb.c57 行で定義されています。

参照元 tdb_delete_samacct_only()tdb_update_ridrec_only()tdb_update_samacct_only()tdbsam_close()tdbsam_convert()tdbsam_delete_sam_account()tdbsam_getsampwent()tdbsam_getsampwnam()tdbsam_getsampwrid()tdbsam_open()tdbsam_rename_sam_account()tdbsam_setsampwent().

int ref_count = 0 [static]

pdb_tdb.c58 行で定義されています。

参照元 tdbsam_close()tdbsam_open().

pstring tdbsam_filename [static]

pdb_tdb.c59 行で定義されています。

参照元 pdb_init_tdbsam()tdb_update_sam()tdbsam_delete_sam_account()tdbsam_getsampwnam()tdbsam_getsampwrid()tdbsam_rename_sam_account()tdbsam_setsampwent().


Sambaに対してSat Aug 29 21:24:01 2009に生成されました。  doxygen 1.4.7