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