nsswitch/winbind_nss_freebsd.c

ソースコードを見る。

関数

enum nss_status _nss_winbind_getgrent_r (struct group *, char *, size_t, int *)
enum nss_status _nss_winbind_getgrnam_r (const char *, struct group *, char *, size_t, int *)
enum nss_status _nss_winbind_getgrgid_r (gid_t gid, struct group *, char *, size_t, int *)
enum nss_status _nss_winbind_setgrent (void)
enum nss_status _nss_winbind_endgrent (void)
enum nss_status _nss_winbind_getpwent_r (struct passwd *, char *, size_t, int *)
enum nss_status _nss_winbind_getpwnam_r (const char *, struct passwd *, char *, size_t, int *)
enum nss_status _nss_winbind_getpwuid_r (gid_t gid, struct passwd *, char *, size_t, int *)
enum nss_status _nss_winbind_setpwent (void)
enum nss_status _nss_winbind_endpwent (void)
 NSS_METHOD_PROTOTYPE (__nss_compat_getgrnam_r)
 NSS_METHOD_PROTOTYPE (__nss_compat_getgrgid_r)
 NSS_METHOD_PROTOTYPE (__nss_compat_getgrent_r)
 NSS_METHOD_PROTOTYPE (__nss_compat_setgrent)
 NSS_METHOD_PROTOTYPE (__nss_compat_endgrent)
 NSS_METHOD_PROTOTYPE (__nss_compat_getpwnam_r)
 NSS_METHOD_PROTOTYPE (__nss_compat_getpwuid_r)
 NSS_METHOD_PROTOTYPE (__nss_compat_getpwent_r)
 NSS_METHOD_PROTOTYPE (__nss_compat_setpwent)
 NSS_METHOD_PROTOTYPE (__nss_compat_endpwent)
ns_mtab * nss_module_register (const char *source, unsigned int *mtabsize, nss_module_unregister_fn *unreg)

変数

static ns_mtab methods []


関数

NSS_STATUS _nss_winbind_getgrent_r ( struct group *  ,
char *  ,
size_t  ,
int *   
)

winbind_nss_linux.c764 行で定義されています。

参照先 winbind_getgrent()WINBINDD_GETGRENT.

参照元 _nss_winbind_getgrent_solwrap()netbsdwinbind_getgrent()netbsdwinbind_getgrent_r().

00766 {
00767         return winbind_getgrent(WINBINDD_GETGRENT, result, buffer, buflen, errnop);
00768 }

NSS_STATUS _nss_winbind_getgrnam_r ( const char *  ,
struct group *  ,
char *  ,
size_t  ,
int *   
)

winbind_nss_linux.c780 行で定義されています。

参照先 winbindd_response::dataerrnowinbindd_response::extra_datafill_grent()fprintf()free_response()winbindd_response::grnss_err_str()NSS_STATUS_SUCCESSNSS_STATUS_TRYAGAINWINBINDD_GETGRNAMwinbindd_request_response().

参照元 _nss_winbind_getgrnam_solwrap()netbsdwinbind_getgrnam()netbsdwinbind_getgrnam_r().

00783 {
00784         NSS_STATUS ret;
00785         static struct winbindd_response response;
00786         struct winbindd_request request;
00787         static int keep_response;
00788         
00789 #ifdef DEBUG_NSS
00790         fprintf(stderr, "[%5d]: getgrnam %s\n", getpid(), name);
00791 #endif
00792 
00793         /* If our static buffer needs to be expanded we are called again */
00794         
00795         if (!keep_response) {
00796 
00797                 /* Call for the first time */
00798 
00799                 ZERO_STRUCT(request);
00800                 ZERO_STRUCT(response);
00801 
00802                 strncpy(request.data.groupname, name, 
00803                         sizeof(request.data.groupname));
00804                 request.data.groupname
00805                         [sizeof(request.data.groupname) - 1] = '\0';
00806 
00807                 ret = winbindd_request_response(WINBINDD_GETGRNAM, &request, &response);
00808 
00809                 if (ret == NSS_STATUS_SUCCESS) {
00810                         ret = fill_grent(result, &response.data.gr, 
00811                                          (char *)response.extra_data.data,
00812                                          &buffer, &buflen);
00813 
00814                         if (ret == NSS_STATUS_TRYAGAIN) {
00815                                 keep_response = True;
00816                                 *errnop = errno = ERANGE;
00817                                 goto done;
00818                         }
00819                 }
00820 
00821         } else {
00822                 
00823                 /* We've been called again */
00824                 
00825                 ret = fill_grent(result, &response.data.gr, 
00826                                  (char *)response.extra_data.data, &buffer,
00827                                  &buflen);
00828                 
00829                 if (ret == NSS_STATUS_TRYAGAIN) {
00830                         keep_response = True;
00831                         *errnop = errno = ERANGE;
00832                         goto done;
00833                 }
00834 
00835                 keep_response = False;
00836                 *errnop = 0;
00837         }
00838 
00839         free_response(&response);
00840         done:
00841 #ifdef DEBUG_NSS
00842         fprintf(stderr, "[%5d]: getgrnam %s returns %s (%d)\n", getpid(),
00843                 name, nss_err_str(ret), ret);
00844 #endif
00845         return ret;
00846 }

NSS_STATUS _nss_winbind_getgrgid_r ( gid_t  gid,
struct group *  ,
char *  ,
size_t  ,
int *   
)

winbind_nss_linux.c851 行で定義されています。

参照先 winbindd_response::dataerrnowinbindd_response::extra_datafill_grent()fprintf()free_response()winbindd_response::grnss_err_str()NSS_STATUS_SUCCESSNSS_STATUS_TRYAGAINWINBINDD_GETGRGIDwinbindd_request_response().

参照元 _nss_winbind_getgrgid_solwrap()netbsdwinbind_getgrgid()netbsdwinbind_getgrgid_r().

00854 {
00855         NSS_STATUS ret;
00856         static struct winbindd_response response;
00857         struct winbindd_request request;
00858         static int keep_response;
00859 
00860 #ifdef DEBUG_NSS
00861         fprintf(stderr, "[%5d]: getgrgid %d\n", getpid(), gid);
00862 #endif
00863 
00864         /* If our static buffer needs to be expanded we are called again */
00865 
00866         if (!keep_response) {
00867 
00868                 /* Call for the first time */
00869 
00870                 ZERO_STRUCT(request);
00871                 ZERO_STRUCT(response);
00872 
00873                 request.data.gid = gid;
00874 
00875                 ret = winbindd_request_response(WINBINDD_GETGRGID, &request, &response);
00876 
00877                 if (ret == NSS_STATUS_SUCCESS) {
00878 
00879                         ret = fill_grent(result, &response.data.gr, 
00880                                          (char *)response.extra_data.data, 
00881                                          &buffer, &buflen);
00882 
00883                         if (ret == NSS_STATUS_TRYAGAIN) {
00884                                 keep_response = True;
00885                                 *errnop = errno = ERANGE;
00886                                 goto done;
00887                         }
00888                 }
00889 
00890         } else {
00891 
00892                 /* We've been called again */
00893 
00894                 ret = fill_grent(result, &response.data.gr, 
00895                                  (char *)response.extra_data.data, &buffer,
00896                                  &buflen);
00897 
00898                 if (ret == NSS_STATUS_TRYAGAIN) {
00899                         keep_response = True;
00900                         *errnop = errno = ERANGE;
00901                         goto done;
00902                 }
00903 
00904                 keep_response = False;
00905                 *errnop = 0;
00906         }
00907 
00908         free_response(&response);
00909         done:
00910 #ifdef DEBUG_NSS
00911         fprintf(stderr, "[%5d]: getgrgid %d returns %s (%d)\n", getpid(),
00912                 (unsigned int)gid, nss_err_str(ret), ret);
00913 #endif
00914         return ret;
00915 }

NSS_STATUS _nss_winbind_setgrent ( void   ) 

winbind_nss_linux.c621 行で定義されています。

参照先 fprintf()free_response()getgrent_responsendx_gr_cachenss_err_str()num_gr_cachewinbindd_request_response()WINBINDD_SETGRENT.

参照元 _nss_winbind_setgrent_solwrap()netbsdwinbind_setgrent().

00622 {
00623         NSS_STATUS ret;
00624 #ifdef DEBUG_NSS
00625         fprintf(stderr, "[%5d]: setgrent\n", getpid());
00626 #endif
00627 
00628         if (num_gr_cache > 0) {
00629                 ndx_gr_cache = num_gr_cache = 0;
00630                 free_response(&getgrent_response);
00631         }
00632 
00633         ret = winbindd_request_response(WINBINDD_SETGRENT, NULL, NULL);
00634 #ifdef DEBUG_NSS
00635         fprintf(stderr, "[%5d]: setgrent returns %s (%d)\n", getpid(),
00636                 nss_err_str(ret), ret);
00637 #endif
00638         return ret;
00639 }

NSS_STATUS _nss_winbind_endgrent ( void   ) 

winbind_nss_linux.c644 行で定義されています。

参照先 fprintf()free_response()getgrent_responsendx_gr_cachenss_err_str()num_gr_cacheWINBINDD_ENDGRENTwinbindd_request_response().

参照元 _nss_winbind_endgrent_solwrap()netbsdwinbind_endgrent().

00645 {
00646         NSS_STATUS ret;
00647 #ifdef DEBUG_NSS
00648         fprintf(stderr, "[%5d]: endgrent\n", getpid());
00649 #endif
00650 
00651         if (num_gr_cache > 0) {
00652                 ndx_gr_cache = num_gr_cache = 0;
00653                 free_response(&getgrent_response);
00654         }
00655 
00656         ret = winbindd_request_response(WINBINDD_ENDGRENT, NULL, NULL);
00657 #ifdef DEBUG_NSS
00658         fprintf(stderr, "[%5d]: endgrent returns %s (%d)\n", getpid(),
00659                 nss_err_str(ret), ret);
00660 #endif
00661         return ret;
00662 }

NSS_STATUS _nss_winbind_getpwent_r ( struct passwd *  ,
char *  ,
size_t  ,
int *   
)

winbind_nss_linux.c395 行で定義されています。

参照先 winbindd_response::datawinbindd_request::dataerrnowinbindd_response::extra_datafill_pwent()fprintf()free_response()getpwent_responsendx_pw_cachenss_err_str()NSS_STATUS_NOTFOUNDNSS_STATUS_SUCCESSNSS_STATUS_TRYAGAINwinbindd_response::num_entrieswinbindd_request::num_entriesnum_pw_cacheWINBINDD_GETPWENTwinbindd_request_response().

参照元 _nss_winbind_getpwent_solwrap()netbsdwinbind_getpwent()netbsdwinbind_getpwent_r().

00397 {
00398         NSS_STATUS ret;
00399         struct winbindd_request request;
00400         static int called_again;
00401 
00402 #ifdef DEBUG_NSS
00403         fprintf(stderr, "[%5d]: getpwent\n", getpid());
00404 #endif
00405 
00406         /* Return an entry from the cache if we have one, or if we are
00407            called again because we exceeded our static buffer.  */
00408 
00409         if ((ndx_pw_cache < num_pw_cache) || called_again) {
00410                 goto return_result;
00411         }
00412 
00413         /* Else call winbindd to get a bunch of entries */
00414         
00415         if (num_pw_cache > 0) {
00416                 free_response(&getpwent_response);
00417         }
00418 
00419         ZERO_STRUCT(request);
00420         ZERO_STRUCT(getpwent_response);
00421 
00422         request.data.num_entries = MAX_GETPWENT_USERS;
00423 
00424         ret = winbindd_request_response(WINBINDD_GETPWENT, &request, 
00425                                &getpwent_response);
00426 
00427         if (ret == NSS_STATUS_SUCCESS) {
00428                 struct winbindd_pw *pw_cache;
00429 
00430                 /* Fill cache */
00431 
00432                 ndx_pw_cache = 0;
00433                 num_pw_cache = getpwent_response.data.num_entries;
00434 
00435                 /* Return a result */
00436 
00437         return_result:
00438 
00439                 pw_cache = (struct winbindd_pw *)
00440                         getpwent_response.extra_data.data;
00441 
00442                 /* Check data is valid */
00443 
00444                 if (pw_cache == NULL) {
00445                         ret = NSS_STATUS_NOTFOUND;
00446                         goto done;
00447                 }
00448 
00449                 ret = fill_pwent(result, &pw_cache[ndx_pw_cache],
00450                                  &buffer, &buflen);
00451                 
00452                 /* Out of memory - try again */
00453 
00454                 if (ret == NSS_STATUS_TRYAGAIN) {
00455                         called_again = True;
00456                         *errnop = errno = ERANGE;
00457                         goto done;
00458                 }
00459 
00460                 *errnop = errno = 0;
00461                 called_again = False;
00462                 ndx_pw_cache++;
00463 
00464                 /* If we've finished with this lot of results free cache */
00465 
00466                 if (ndx_pw_cache == num_pw_cache) {
00467                         ndx_pw_cache = num_pw_cache = 0;
00468                         free_response(&getpwent_response);
00469                 }
00470         }
00471         done:
00472 #ifdef DEBUG_NSS
00473         fprintf(stderr, "[%5d]: getpwent returns %s (%d)\n", getpid(),
00474                 nss_err_str(ret), ret);
00475 #endif
00476         return ret;
00477 }

NSS_STATUS _nss_winbind_getpwnam_r ( const char *  ,
struct passwd *  ,
char *  ,
size_t  ,
int *   
)

winbind_nss_linux.c545 行で定義されています。

参照先 winbindd_response::datawinbindd_request::dataerrnofill_pwent()fprintf()free_response()nss_err_str()NSS_STATUS_SUCCESSNSS_STATUS_TRYAGAINwinbindd_response::pwwinbindd_request::usernameWINBINDD_GETPWNAMwinbindd_request_response().

参照元 _nss_winbind_getpwnam_solwrap()netbsdwinbind_getpwnam()netbsdwinbind_getpwnam_r().

00547 {
00548         NSS_STATUS ret;
00549         static struct winbindd_response response;
00550         struct winbindd_request request;
00551         static int keep_response;
00552 
00553 #ifdef DEBUG_NSS
00554         fprintf(stderr, "[%5d]: getpwnam %s\n", getpid(), name);
00555 #endif
00556 
00557         /* If our static buffer needs to be expanded we are called again */
00558 
00559         if (!keep_response) {
00560 
00561                 /* Call for the first time */
00562 
00563                 ZERO_STRUCT(response);
00564                 ZERO_STRUCT(request);
00565 
00566                 strncpy(request.data.username, name, 
00567                         sizeof(request.data.username) - 1);
00568                 request.data.username
00569                         [sizeof(request.data.username) - 1] = '\0';
00570 
00571                 ret = winbindd_request_response(WINBINDD_GETPWNAM, &request, &response);
00572 
00573                 if (ret == NSS_STATUS_SUCCESS) {
00574                         ret = fill_pwent(result, &response.data.pw, &buffer,
00575                                          &buflen);
00576 
00577                         if (ret == NSS_STATUS_TRYAGAIN) {
00578                                 keep_response = True;
00579                                 *errnop = errno = ERANGE;
00580                                 goto done;
00581                         }
00582                 }
00583 
00584         } else {
00585 
00586                 /* We've been called again */
00587 
00588                 ret = fill_pwent(result, &response.data.pw, &buffer, &buflen);
00589 
00590                 if (ret == NSS_STATUS_TRYAGAIN) {
00591                         keep_response = True;
00592                         *errnop = errno = ERANGE;
00593                         goto done;
00594                 }
00595 
00596                 keep_response = False;
00597                 *errnop = errno = 0;
00598         }
00599 
00600         free_response(&response);
00601         done:
00602 #ifdef DEBUG_NSS
00603         fprintf(stderr, "[%5d]: getpwnam %s returns %s (%d)\n", getpid(),
00604                 name, nss_err_str(ret), ret);
00605 #endif
00606         return ret;
00607 }

enum nss_status _nss_winbind_getpwuid_r ( gid_t  gid,
struct passwd *  ,
char *  ,
size_t  ,
int *   
)

参照元 _nss_winbind_getpwuid_solwrap()netbsdwinbind_getpwuid()netbsdwinbind_getpwuid_r().

NSS_STATUS _nss_winbind_setpwent ( void   ) 

winbind_nss_linux.c349 行で定義されています。

参照先 fprintf()free_response()getpwent_responsendx_pw_cachenss_err_str()num_pw_cachewinbindd_request_response()WINBINDD_SETPWENT.

参照元 _nss_winbind_setpwent_solwrap()netbsdwinbind_setpwent().

00350 {
00351         NSS_STATUS ret;
00352 #ifdef DEBUG_NSS
00353         fprintf(stderr, "[%5d]: setpwent\n", getpid());
00354 #endif
00355 
00356         if (num_pw_cache > 0) {
00357                 ndx_pw_cache = num_pw_cache = 0;
00358                 free_response(&getpwent_response);
00359         }
00360 
00361         ret = winbindd_request_response(WINBINDD_SETPWENT, NULL, NULL);
00362 #ifdef DEBUG_NSS
00363         fprintf(stderr, "[%5d]: setpwent returns %s (%d)\n", getpid(),
00364                 nss_err_str(ret), ret);
00365 #endif
00366         return ret;
00367 }

NSS_STATUS _nss_winbind_endpwent ( void   ) 

winbind_nss_linux.c372 行で定義されています。

参照先 fprintf()free_response()getpwent_responsendx_pw_cachenss_err_str()num_pw_cacheWINBINDD_ENDPWENTwinbindd_request_response().

参照元 _nss_winbind_endpwent_solwrap()netbsdwinbind_endpwent().

00373 {
00374         NSS_STATUS ret;
00375 #ifdef DEBUG_NSS
00376         fprintf(stderr, "[%5d]: endpwent\n", getpid());
00377 #endif
00378 
00379         if (num_pw_cache > 0) {
00380                 ndx_pw_cache = num_pw_cache = 0;
00381                 free_response(&getpwent_response);
00382         }
00383 
00384         ret = winbindd_request_response(WINBINDD_ENDPWENT, NULL, NULL);
00385 #ifdef DEBUG_NSS
00386         fprintf(stderr, "[%5d]: endpwent returns %s (%d)\n", getpid(),
00387                 nss_err_str(ret), ret);
00388 #endif
00389         return ret;
00390 }

NSS_METHOD_PROTOTYPE ( __nss_compat_getgrnam_r   ) 

NSS_METHOD_PROTOTYPE ( __nss_compat_getgrgid_r   ) 

NSS_METHOD_PROTOTYPE ( __nss_compat_getgrent_r   ) 

NSS_METHOD_PROTOTYPE ( __nss_compat_setgrent   ) 

NSS_METHOD_PROTOTYPE ( __nss_compat_endgrent   ) 

NSS_METHOD_PROTOTYPE ( __nss_compat_getpwnam_r   ) 

NSS_METHOD_PROTOTYPE ( __nss_compat_getpwuid_r   ) 

NSS_METHOD_PROTOTYPE ( __nss_compat_getpwent_r   ) 

NSS_METHOD_PROTOTYPE ( __nss_compat_setpwent   ) 

NSS_METHOD_PROTOTYPE ( __nss_compat_endpwent   ) 

ns_mtab* nss_module_register ( const char *  source,
unsigned int *  mtabsize,
nss_module_unregister_fn *  unreg 
)

winbind_nss_freebsd.c75 行で定義されています。

参照先 methods.

00077 {
00078         *mtabsize = sizeof(methods)/sizeof(methods[0]);
00079         *unreg = NULL;
00080         return (methods);
00081 }


変数

ns_mtab methods[] [static]

初期値:

 {
{ NSDB_GROUP, "getgrnam_r", __nss_compat_getgrnam_r, _nss_winbind_getgrnam_r },
{ NSDB_GROUP, "getgrgid_r", __nss_compat_getgrgid_r, _nss_winbind_getgrgid_r },
{ NSDB_GROUP, "getgrent_r", __nss_compat_getgrent_r, _nss_winbind_getgrent_r },
{ NSDB_GROUP, "endgrent",   __nss_compat_setgrent,   _nss_winbind_setgrent },
{ NSDB_GROUP, "setgrent",   __nss_compat_endgrent,   _nss_winbind_endgrent },

{ NSDB_PASSWD, "getpwnam_r", __nss_compat_getpwnam_r, _nss_winbind_getpwnam_r },
{ NSDB_PASSWD, "getpwuid_r", __nss_compat_getpwuid_r, _nss_winbind_getpwuid_r },
{ NSDB_PASSWD, "getpwent_r", __nss_compat_getpwent_r, _nss_winbind_getpwent_r },
{ NSDB_PASSWD, "endpwent",   __nss_compat_setpwent,   _nss_winbind_setpwent },
{ NSDB_PASSWD, "setpwent",   __nss_compat_endpwent,   _nss_winbind_endpwent },

}

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

参照元 account_lockout_policy_handler()fillup_password_policy()get_max_bad_attempts_from_lockout_policy()get_pwd_properties()get_sam_user_entries()idmap_dump_maps()ldapsam_add_aliasmem()ldapsam_add_group_mapping_entry()ldapsam_alias_memberships()ldapsam_del_aliasmem()ldapsam_delete_group_mapping_entry()ldapsam_enum_aliasmem()ldapsam_enum_group_mapping()ldapsam_enum_group_members()ldapsam_enum_group_memberships()ldapsam_get_account_policy()ldapsam_get_account_policy_from_ldap()ldapsam_getgrgid()ldapsam_getgrnam()ldapsam_getgroup()ldapsam_getgrsid()ldapsam_lookup_rids()ldapsam_modify_aliasmem()ldapsam_new_rid()ldapsam_new_rid_internal()ldapsam_search_aliases()ldapsam_search_groups()ldapsam_search_grouptype()ldapsam_search_users()ldapsam_set_account_policy()ldapsam_set_account_policy_in_ldap()ldapsam_sid_to_id()ldapsam_update_group_mapping_entry()make_pdb_method()make_pdb_method_name()nss_module_register()pdb_default_gid_to_sid()pdb_default_sid_to_id()pdb_default_uid_to_rid()pdb_default_uid_to_sid()pdb_nds_update_login_attempts()smb_register_idmap()smb_register_idmap_alloc()smb_register_idmap_nss()tdb_recovery_allocate()tdb_transaction_commit()transaction_setup_recovery()winbindd_list_users().


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