1 /* Copyright (C) 1997, 1998, 1999, 2006, 2007 Free Software Foundation, Inc. 2 This file is part of the GNU C Library. 3 Contributed by Thorsten Kukuk <kukuk (at) suse.de>, 1997. 4 5 The GNU C Library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 The GNU C Library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with the GNU C Library; if not, write to the Free 17 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 18 02111-1307 USA. */ 19 20 #ifndef __RPCSVC_NISLIB_H__ 21 #define __RPCSVC_NISLIB_H__ 22 23 #include <features.h> 24 25 __BEGIN_DECLS 26 27 typedef const char *const_nis_name; 28 29 /* nis_names: These functions are used to locate and manipulate all NIS+ 30 * objects except the NIS+ entry objects. 31 * 32 * nis_lookup (name, flags) resolves a NIS+ name and returns a copy of 33 * that object from a NIS+ server. 34 * const nis_name name: name of the object to be resolved 35 * unsigned int flags: logically ORing zero or more flags (FOLLOW_LINKS, 36 * HARD_LOOKUP, [NO_CACHE], MASTER_ONLY, EXPAND_NAME) 37 * 38 * nis_add (name, obj) adds objects to the NIS+ namespace. 39 * const nis_name name: fully qualified NIS+ name. 40 * const nis_object *obj: object members zo_name and zo_domain will be 41 * constructed from name. 42 * 43 * nis_remove (name, obj) removes objects from the NIS+ namespace. 44 * const nis_name name: fully qualified NIS+ name. 45 * const nis_object *obj: if not NULL, it is assumed to point to a copy 46 * of the object being removed. In this case, if 47 * the object on the server does not have the same 48 * object identifier as the object being passed, 49 * the operation will fail with the NIS_NOTSAMEOBJ 50 * error. 51 * 52 * nis_modify (name, obj) can change specific attributes of an object 53 * that already exists in the namespace. 54 */ 55 extern nis_result *nis_lookup (const_nis_name name, unsigned int flags) 56 __THROW; 57 extern nis_result *nis_add (const_nis_name name, const nis_object *obj) 58 __THROW; 59 extern nis_result *nis_remove (const_nis_name name, 60 const nis_object *obj) __THROW; 61 extern nis_result *nis_modify (const_nis_name name, 62 const nis_object *obj) __THROW; 63 64 /* nis_tables: These functions are used to search and modify NIS+ tables. 65 * 66 * nis_list (table_name, flags, callback(table_name, obj, userdata), userdata) 67 * search a table in the NIS+ namespace. 68 * const nis_name table_name: indexed name ([xx=yy],table.dir) 69 * unsigned int flags: logically ORing one or more flags (FOLLOW_LINKS, 70 * [FOLLOW_PATH], HARD_LOOKUP, [ALL_RESULTS], [NO_CACHE], 71 * MASTER_ONLY, EXPAND_NAME, RETURN_RESULT) 72 * callback(): callback is an optional pointer to a function that will 73 * process the ENTRY type objects that are returned from the 74 * search. If this pointer is NULL, then all entries that match 75 * the search criteria are returned in the nis_result structure, 76 * otherwise this function will be called once for each 77 * entry returned. 78 * void *userdata: passed to callback function along with the returned 79 * entry object. 80 * 81 * nis_add_entry (table_name, obj, flags) will add the NIS+ object to the 82 * NIS+ table_name. 83 * const nis_name table_name 84 * const nis_object *obj 85 * unsigned int flags: 0, ADD_OVERWRITE, RETURN_RESULT 86 * 87 * nis_modify_entry (name, obj, flags) modifies an object identified by name. 88 * const nis_name name: object identifier 89 * const nis_object *obj: should point to an entry with the EN_MODIFIED 90 * flag set in each column that contains new 91 * information. 92 * unsigned int flags: 0, MOD_SAMEOBJ, RETURN_RESULT 93 * 94 * nis_remove_entry (table_name, obj, flags) removes a set of entries 95 * identified by table_name from the table. 96 * const nis_name table_name: indexed NIS+ name 97 * const nis_object *obj: if obj is non-null, it is presumed to point to 98 * a cached copy of the entry. When the removal is 99 * attempted, and the object that would be removed 100 * is not the same as the cached object pointed to 101 * by object then the operation will fail with an 102 * NIS_NOTSAMEOBJ error 103 * unsigned int flags: 0, REM_MULTIPLE 104 * 105 * nis_first_entry (table_name) fetches entries from a table one at a time. 106 * const nis_name table_name 107 * 108 * nis_next_entry (table_name, cookie) retrieves the "next" entry from a 109 * table specified by table_name. 110 * const nis_name table_name: 111 * const netobj *cookie: The value of cookie from the nis_result structure 112 * form the previous call. 113 */ 114 extern nis_result *nis_list (const_nis_name name, unsigned int flags, 115 int (*callback)(const_nis_name table_name, 116 const nis_object *obj, 117 const void *userdata), 118 const void *userdata) __THROW; 119 extern nis_result *nis_add_entry (const_nis_name table_name, 120 const nis_object *obj, 121 unsigned int flags) __THROW; 122 extern nis_result *nis_modify_entry (const_nis_name name, 123 const nis_object *obj, 124 unsigned int flags) __THROW; 125 extern nis_result *nis_remove_entry (const_nis_name table_name, 126 const nis_object *obj, 127 unsigned int flags) __THROW; 128 extern nis_result *nis_first_entry (const_nis_name table_name) __THROW; 129 extern nis_result *nis_next_entry (const_nis_name table_name, 130 const netobj *cookie) __THROW; 131 /* 132 ** nis_server 133 */ 134 extern nis_error nis_mkdir (const_nis_name dirname, 135 const nis_server *machine) __THROW; 136 extern nis_error nis_rmdir (const_nis_name dirname, 137 const nis_server *machine) __THROW; 138 extern nis_error nis_servstate (const nis_server *machine, 139 const nis_tag *tags, int numtags, 140 nis_tag **result) __THROW; 141 extern nis_error nis_stats (const nis_server *machine, 142 const nis_tag *tags, int numtags, 143 nis_tag **result) __THROW; 144 extern void nis_freetags (nis_tag *tags, int numtags) __THROW; 145 extern nis_server **nis_getservlist (const_nis_name dirname) __THROW; 146 extern void nis_freeservlist (nis_server **machines) __THROW; 147 148 /* 149 ** nis_subr 150 */ 151 extern nis_name nis_leaf_of (const_nis_name name) __THROW; 152 extern nis_name nis_leaf_of_r (const_nis_name name, char *buffer, 153 size_t buflen) __THROW; 154 extern nis_name nis_name_of (const_nis_name name) __THROW; 155 extern nis_name nis_name_of_r (const_nis_name name, char *buffer, 156 size_t buflen) __THROW; 157 extern nis_name nis_domain_of (const_nis_name name) __THROW; 158 extern nis_name nis_domain_of_r (const_nis_name name, char *buffer, 159 size_t buflen) __THROW; 160 extern nis_name *nis_getnames (const_nis_name name) __THROW; 161 extern void nis_freenames (nis_name *namelist) __THROW; 162 extern name_pos nis_dir_cmp (const_nis_name n1, const_nis_name n2) __THROW; 163 extern nis_object *nis_clone_object (const nis_object *src, 164 nis_object *dest) __THROW; 165 extern void nis_destroy_object (nis_object *obj) __THROW; 166 extern void nis_print_object (const nis_object *obj) __THROW; 167 168 /* 169 ** nis_local_names 170 */ 171 extern nis_name nis_local_group (void) __THROW; 172 extern nis_name nis_local_directory (void) __THROW; 173 extern nis_name nis_local_principal (void) __THROW; 174 extern nis_name nis_local_host (void) __THROW; 175 176 /* 177 ** nis_error 178 */ 179 extern const char *nis_sperrno (const nis_error status) __THROW; 180 extern void nis_perror (const nis_error status, const char *label) __THROW; 181 extern void nis_lerror (const nis_error status, const char *label) __THROW; 182 extern char *nis_sperror (const nis_error status, const char *label) __THROW; 183 extern char *nis_sperror_r (const nis_error status, const char *label, 184 char *buffer, size_t buflen) __THROW; 185 /* 186 ** nis_groups 187 */ 188 extern bool_t nis_ismember (const_nis_name principal, 189 const_nis_name group) __THROW; 190 extern nis_error nis_addmember (const_nis_name member, 191 const_nis_name group) __THROW; 192 extern nis_error nis_removemember (const_nis_name member, 193 const_nis_name group) __THROW; 194 extern nis_error nis_creategroup (const_nis_name group, 195 unsigned int flags) __THROW; 196 extern nis_error nis_destroygroup (const_nis_name group) __THROW; 197 extern void nis_print_group_entry (const_nis_name group) __THROW; 198 extern nis_error nis_verifygroup (const_nis_name group) __THROW; 199 200 /* 201 ** nis_ping 202 */ 203 extern void nis_ping (const_nis_name dirname, uint32_t utime, 204 const nis_object *dirobj) __THROW; 205 extern nis_result *nis_checkpoint (const_nis_name dirname) __THROW; 206 207 /* 208 ** nis_print (XXX INTERNAL FUNCTIONS, SHOULD NOT BE USED !!) 209 */ 210 extern void nis_print_result (const nis_result *result) __THROW; 211 extern void nis_print_rights (unsigned int rights) __THROW; 212 extern void nis_print_directory (const directory_obj *dirobj) __THROW; 213 extern void nis_print_group (const group_obj *grpobj) __THROW; 214 extern void nis_print_table (const table_obj *tblobj) __THROW; 215 extern void nis_print_link (const link_obj *lnkobj) __THROW; 216 extern void nis_print_entry (const entry_obj *enobj) __THROW; 217 218 /* 219 ** nis_file (XXX INTERNAL FUNCTIONS, SHOULD NOT BE USED !!) 220 */ 221 extern directory_obj *readColdStartFile (void) __THROW; 222 extern bool_t writeColdStartFile (const directory_obj *dirobj) __THROW; 223 extern nis_object *nis_read_obj (const char *obj) __THROW; 224 extern bool_t nis_write_obj (const char *file, const nis_object *obj) __THROW; 225 226 /* 227 ** nis_clone - (XXX INTERNAL FUNCTIONS, SHOULD NOT BE USED !!) 228 */ 229 extern directory_obj *nis_clone_directory (const directory_obj *src, 230 directory_obj *dest) __THROW; 231 extern nis_result *nis_clone_result (const nis_result *src, 232 nis_result *dest) __THROW; 233 234 /* nis_free - nis_freeresult */ 235 extern void nis_freeresult (nis_result *result) __THROW; 236 /* (XXX THE FOLLOWING ARE INTERNAL FUNCTIONS, SHOULD NOT BE USED !!) */ 237 extern void nis_free_request (ib_request *req) __THROW; 238 extern void nis_free_directory (directory_obj *dirobj) __THROW; 239 extern void nis_free_object (nis_object *obj) __THROW; 240 241 /* (XXX INTERNAL FUNCTIONS, SHOULD NOT BE USED !!) */ 242 extern nis_name __nis_default_owner (char *) __THROW; 243 extern nis_name __nis_default_group (char *) __THROW; 244 extern uint32_t __nis_default_ttl (char *) __THROW; 245 extern unsigned int __nis_default_access (char *, unsigned int) __THROW; 246 extern fd_result *__nis_finddirectory (directory_obj *, const_nis_name) __THROW; 247 extern void __free_fdresult (fd_result *) __THROW; 248 extern uint32_t __nis_hash (const void *keyarg, register size_t len) __THROW; 249 250 /* NIS+ cache locking */ 251 extern int __nis_lock_cache (void) __THROW; 252 extern int __nis_unlock_cache (void) __THROW; 253 254 /* (XXX INTERNAL FUNCTIONS, ONLY FOR rpc.nisd AND glibc !!) */ 255 #if defined (NIS_INTERNAL) || defined (_LIBC) 256 257 struct dir_binding 258 { 259 CLIENT *clnt; /* RPC CLIENT handle */ 260 nis_server *server_val; /* List of servers */ 261 unsigned int server_len; /* # of servers */ 262 unsigned int server_used; /* Which server we are bind in the moment ? */ 263 unsigned int current_ep; /* Which endpoint of the server are in use? */ 264 unsigned int trys; /* How many server have we tried ? */ 265 unsigned int class; /* From which class is server_val ? */ 266 bool_t master_only; /* Is only binded to the master */ 267 bool_t use_auth; /* Do we use AUTH ? */ 268 bool_t use_udp; /* Do we use UDP ? */ 269 struct sockaddr_in addr; /* Server's IP address */ 270 int socket; /* Server's local socket */ 271 }; 272 typedef struct dir_binding dir_binding; 273 274 extern nis_error __nisbind_create (dir_binding *, const nis_server *, 275 unsigned int, unsigned int, unsigned int, 276 unsigned int) __THROW; 277 extern nis_error __nisbind_connect (dir_binding *) __THROW; 278 extern nis_error __nisbind_next (dir_binding *) __THROW; 279 extern void __nisbind_destroy (dir_binding *) __THROW; 280 extern nis_error __nisfind_server (const_nis_name, int, directory_obj **, 281 dir_binding *, unsigned int) __THROW; 282 283 #endif 284 285 __END_DECLS 286 287 #endif /* __RPCSVC_NISLIB_H__ */ 288