diff options
Diffstat (limited to 'nis')
-rw-r--r-- | nis/TODO | 3 | ||||
-rw-r--r-- | nis/libnsl.map | 2 | ||||
-rw-r--r-- | nis/libnss_compat.map | 2 | ||||
-rw-r--r-- | nis/nis_add.c | 5 | ||||
-rw-r--r-- | nis/nis_clone.c | 34 | ||||
-rw-r--r-- | nis/nis_modify.c | 25 | ||||
-rw-r--r-- | nis/nis_table.c | 54 |
7 files changed, 101 insertions, 24 deletions
diff --git a/nis/TODO b/nis/TODO index f87b02a407..f6d695956a 100644 --- a/nis/TODO +++ b/nis/TODO @@ -1,4 +1,7 @@ + * nis_addmember: Where checks for duplicate group members ? nisgrpadm or + nis_addmember ? + * nss_nisplus: When using parser form nss_files, rewrite parser * nis_table.c: nis_list(): diff --git a/nis/libnsl.map b/nis/libnsl.map index 5cb3bc30f7..ab88de6cb8 100644 --- a/nis/libnsl.map +++ b/nis/libnsl.map @@ -11,4 +11,4 @@ GLIBC_2.0 { local: *; -}; \ No newline at end of file +}; diff --git a/nis/libnss_compat.map b/nis/libnss_compat.map index 55d6f4745f..cff0ef2c15 100644 --- a/nis/libnss_compat.map +++ b/nis/libnss_compat.map @@ -8,4 +8,4 @@ GLIBC_2.0 { local: *; -}; \ No newline at end of file +}; diff --git a/nis/nis_add.c b/nis/nis_add.c index e358ea4987..9baf4e8278 100644 --- a/nis/nis_add.c +++ b/nis/nis_add.c @@ -40,8 +40,9 @@ nis_add (const_nis_name name, const nis_object *obj) req.ns_object.ns_object_val = nis_clone_object (obj, NULL); p1 = req.ns_object.ns_object_val[0].zo_name; - req.ns_object.ns_object_val[0].zo_name = - nis_leaf_of_r (name, buf1, sizeof (buf1)); + if (p1 == NULL || strlen (p1) == 0) + req.ns_object.ns_object_val[0].zo_name = + nis_leaf_of_r (name, buf1, sizeof (buf1)); p2 = req.ns_object.ns_object_val[0].zo_owner; if (p2 == NULL || strlen (p2) == 0) diff --git a/nis/nis_clone.c b/nis/nis_clone.c index e4dc87d4c9..a1d753692c 100644 --- a/nis/nis_clone.c +++ b/nis/nis_clone.c @@ -161,9 +161,8 @@ nis_clone_group (const group_obj *src, group_obj *dest) { if (res->gr_members.gr_members_val == NULL) { - res->gr_members.gr_members_val = - malloc (res->gr_members.gr_members_len * sizeof (nis_name)); - if (res->gr_members.gr_members_val == NULL) + if ((res->gr_members.gr_members_val = + malloc (res->gr_members.gr_members_len * sizeof (nis_name))) == NULL) return NULL; } for (i = 0; i < res->gr_members.gr_members_len; ++i) @@ -208,9 +207,8 @@ nis_clone_table (const table_obj *src, table_obj *dest) res->ta_cols.ta_cols_len = src->ta_cols.ta_cols_len; if (res->ta_cols.ta_cols_val == NULL) { - res->ta_cols.ta_cols_val = - malloc (src->ta_cols.ta_cols_len * sizeof (table_col)); - if (res->ta_cols.ta_cols_val == NULL) + if ((res->ta_cols.ta_cols_val = + calloc (1, src->ta_cols.ta_cols_len * sizeof (table_col))) == NULL) return NULL; } for (i = 0; i < res->ta_cols.ta_cols_len; i++) @@ -312,16 +310,19 @@ nis_clone_nis_attr (const nis_attr *src, nis_attr *dest) res->zattr_ndx = NULL; res->zattr_val.zattr_val_len = src->zattr_val.zattr_val_len; - if (res->zattr_val.zattr_val_val == NULL) + if (res->zattr_val.zattr_val_len > 0) { - res->zattr_val.zattr_val_val = - malloc (src->zattr_val.zattr_val_len); if (res->zattr_val.zattr_val_val == NULL) - return NULL; + { + if ((res->zattr_val.zattr_val_val = + calloc (1, src->zattr_val.zattr_val_len)) == NULL) + return NULL; + } + memcpy (res->zattr_val.zattr_val_val, src->zattr_val.zattr_val_val, + src->zattr_val.zattr_val_len); } - memcpy (res->zattr_val.zattr_val_val, src->zattr_val.zattr_val_val, - src->zattr_val.zattr_val_len); - + else + res->zattr_val.zattr_val_val = NULL; return res; } @@ -440,15 +441,12 @@ nis_clone_objdata (const objdata *src, objdata *dest) src->objdata_u.po_data.po_data_len; if (src->objdata_u.po_data.po_data_val) { - res->objdata_u.po_data.po_data_val = - malloc (res->objdata_u.po_data.po_data_len); - if (res->objdata_u.po_data.po_data_val == NULL) + if ((res->objdata_u.po_data.po_data_val = + malloc (res->objdata_u.po_data.po_data_len)) == NULL) return NULL; memcpy (res->objdata_u.po_data.po_data_val, src->objdata_u.po_data.po_data_val, src->objdata_u.po_data.po_data_len); - if (res->objdata_u.po_data.po_data_val == NULL) - return NULL; } else { diff --git a/nis/nis_modify.c b/nis/nis_modify.c index e68bf2a954..04572794a8 100644 --- a/nis/nis_modify.c +++ b/nis/nis_modify.c @@ -28,6 +28,9 @@ nis_modify (const_nis_name name, const nis_object *obj) nis_result *res; nis_error status; struct ns_request req; + char *p1, *p2, *p3, *p4; + char buf1 [strlen (name) + 20]; + char buf4 [strlen (name) + 20]; res = calloc (1, sizeof (nis_result)); @@ -36,11 +39,33 @@ nis_modify (const_nis_name name, const nis_object *obj) req.ns_object.ns_object_len = 1; req.ns_object.ns_object_val = nis_clone_object (obj, NULL); + p1 = req.ns_object.ns_object_val[0].zo_name; + if (p1 == NULL || strlen (p1) == 0) + req.ns_object.ns_object_val[0].zo_name = + nis_leaf_of_r (name, buf1, sizeof (buf1)); + + p2 = req.ns_object.ns_object_val[0].zo_owner; + if (p2 == NULL || strlen (p2) == 0) + req.ns_object.ns_object_val[0].zo_owner = nis_local_principal (); + + p3 = req.ns_object.ns_object_val[0].zo_group; + if (p3 == NULL || strlen (p3) == 0) + req.ns_object.ns_object_val[0].zo_group = nis_local_group (); + + p4 = req.ns_object.ns_object_val[0].zo_domain; + req.ns_object.ns_object_val[0].zo_domain = + nis_domain_of_r (name, buf4, sizeof (buf4)); + if ((status = __do_niscall (name, NIS_MODIFY, (xdrproc_t) xdr_ns_request, (caddr_t) & req, (xdrproc_t) xdr_nis_result, (caddr_t) res, MASTER_ONLY)) != RPC_SUCCESS) res->status = status; + req.ns_object.ns_object_val[0].zo_name = p1; + req.ns_object.ns_object_val[0].zo_owner = p2; + req.ns_object.ns_object_val[0].zo_group = p3; + req.ns_object.ns_object_val[0].zo_domain = p4; + nis_destroy_object (req.ns_object.ns_object_val); return res; diff --git a/nis/nis_table.c b/nis/nis_table.c index e9e35abf3b..4cfd734173 100644 --- a/nis/nis_table.c +++ b/nis/nis_table.c @@ -261,8 +261,11 @@ nis_add_entry (const_nis_name name, const nis_object *obj, u_long flags) { nis_result *res; - struct ib_request ibreq; nis_error status; + struct ib_request ibreq; + char *p1, *p2, *p3, *p4; + char buf1 [strlen (name) + 20]; + char buf4 [strlen (name) + 20]; res = calloc (1, sizeof (nis_result)); @@ -276,6 +279,23 @@ nis_add_entry (const_nis_name name, const nis_object *obj, ibreq.ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL); ibreq.ibr_obj.ibr_obj_len = 1; + p1 = ibreq.ibr_obj.ibr_obj_val[0].zo_name; + if (p1 == NULL || strlen (p1) == 0) + ibreq.ibr_obj.ibr_obj_val[0].zo_name = + nis_leaf_of_r (name, buf1, sizeof (buf1)); + + p2 = ibreq.ibr_obj.ibr_obj_val[0].zo_owner; + if (p2 == NULL || strlen (p2) == 0) + ibreq.ibr_obj.ibr_obj_val[0].zo_owner = nis_local_principal (); + + p3 = ibreq.ibr_obj.ibr_obj_val[0].zo_group; + if (p3 == NULL || strlen (p3) == 0) + ibreq.ibr_obj.ibr_obj_val[0].zo_group = nis_local_group (); + + p4 = ibreq.ibr_obj.ibr_obj_val[0].zo_domain; + ibreq.ibr_obj.ibr_obj_val[0].zo_domain = + nis_domain_of_r (name, buf4, sizeof (buf4)); + if ((status = __do_niscall (ibreq.ibr_name, NIS_IBADD, (xdrproc_t) xdr_ib_request, (caddr_t) &ibreq, @@ -283,6 +303,11 @@ nis_add_entry (const_nis_name name, const nis_object *obj, (caddr_t) res, 0)) != RPC_SUCCESS) res->status = status; + ibreq.ibr_obj.ibr_obj_val[0].zo_name = p1; + ibreq.ibr_obj.ibr_obj_val[0].zo_owner = p2; + ibreq.ibr_obj.ibr_obj_val[0].zo_group = p3; + ibreq.ibr_obj.ibr_obj_val[0].zo_domain = p4; + nis_free_request (&ibreq); return res; @@ -293,8 +318,11 @@ nis_modify_entry (const_nis_name name, const nis_object *obj, u_long flags) { nis_result *res; - struct ib_request ibreq; nis_error status; + struct ib_request ibreq; + char *p1, *p2, *p3, *p4; + char buf1 [strlen (name) + 20]; + char buf4 [strlen (name) + 20]; res = calloc (1, sizeof (nis_result)); @@ -308,12 +336,34 @@ nis_modify_entry (const_nis_name name, const nis_object *obj, ibreq.ibr_obj.ibr_obj_val = nis_clone_object (obj, NULL); ibreq.ibr_obj.ibr_obj_len = 1; + p1 = ibreq.ibr_obj.ibr_obj_val[0].zo_name; + if (p1 == NULL || strlen (p1) == 0) + ibreq.ibr_obj.ibr_obj_val[0].zo_name = + nis_leaf_of_r (name, buf1, sizeof (buf1)); + + p2 = ibreq.ibr_obj.ibr_obj_val[0].zo_owner; + if (p2 == NULL || strlen (p2) == 0) + ibreq.ibr_obj.ibr_obj_val[0].zo_owner = nis_local_principal (); + + p3 = ibreq.ibr_obj.ibr_obj_val[0].zo_group; + if (p3 == NULL || strlen (p3) == 0) + ibreq.ibr_obj.ibr_obj_val[0].zo_group = nis_local_group (); + + p4 = ibreq.ibr_obj.ibr_obj_val[0].zo_domain; + ibreq.ibr_obj.ibr_obj_val[0].zo_domain = + nis_domain_of_r (name, buf4, sizeof (buf4)); + if ((status = __do_niscall (ibreq.ibr_name, NIS_IBMODIFY, (xdrproc_t) xdr_ib_request, (caddr_t) & ibreq, (xdrproc_t) xdr_nis_result, (caddr_t) res, 0)) != RPC_SUCCESS) res->status = status; + ibreq.ibr_obj.ibr_obj_val[0].zo_name = p1; + ibreq.ibr_obj.ibr_obj_val[0].zo_owner = p2; + ibreq.ibr_obj.ibr_obj_val[0].zo_group = p3; + ibreq.ibr_obj.ibr_obj_val[0].zo_domain = p4; + nis_free_request (&ibreq); return res; |