libcli/security Add sid_blob_parse() to directly parse a binary SID blob
authorAndrew Bartlett <abartlet@samba.org>
Wed, 15 Dec 2010 04:47:01 +0000 (15:47 +1100)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 16 Dec 2010 04:54:30 +0000 (15:54 +1100)
libcli/security/dom_sid.h
libcli/security/util_sid.c

index 3d1161fdc73b691143deec1de2550c994ad999e2..8d59b1824c15163a2dfa51702a8f595cb9d4ee4c 100644 (file)
@@ -81,6 +81,7 @@ bool sid_split_rid(struct dom_sid *sid, uint32_t *rid);
 bool sid_peek_rid(const struct dom_sid *sid, uint32_t *rid);
 bool sid_peek_check_rid(const struct dom_sid *exp_dom_sid, const struct dom_sid *sid, uint32_t *rid);
 void sid_copy(struct dom_sid *dst, const struct dom_sid *src);
+bool sid_blob_parse(DATA_BLOB in, struct dom_sid *sid);
 bool sid_parse(const char *inbuf, size_t len, struct dom_sid *sid);
 int sid_compare_domain(const struct dom_sid *sid1, const struct dom_sid *sid2);
 bool sid_equal(const struct dom_sid *sid1, const struct dom_sid *sid2);
index 9ba28ebc7507225515d3209f81cb4715afaeeacd..18b99519606dc575793d40c0bd3a2337df895498 100644 (file)
@@ -233,13 +233,12 @@ void sid_copy(struct dom_sid *dst, const struct dom_sid *src)
 }
 
 /*****************************************************************
- Parse a on-the-wire SID to a struct dom_sid.
+ Parse a on-the-wire SID (in a DATA_BLOB) to a struct dom_sid.
 *****************************************************************/
 
-bool sid_parse(const char *inbuf, size_t len, struct dom_sid *sid)
+bool sid_blob_parse(DATA_BLOB in, struct dom_sid *sid)
 {
        enum ndr_err_code ndr_err;
-       DATA_BLOB in = data_blob_const(inbuf, len);
        ndr_err = ndr_pull_struct_blob_all(&in, NULL, sid,
                                           (ndr_pull_flags_fn_t)ndr_pull_dom_sid);
        if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
@@ -248,6 +247,17 @@ bool sid_parse(const char *inbuf, size_t len, struct dom_sid *sid)
        return true;
 }
 
+/*****************************************************************
+ Parse a on-the-wire SID to a struct dom_sid.
+*****************************************************************/
+
+bool sid_parse(const char *inbuf, size_t len, struct dom_sid *sid)
+{
+       enum ndr_err_code ndr_err;
+       DATA_BLOB in = data_blob_const(inbuf, len);
+       return sid_blob_parse(in, sid);
+}
+
 /*****************************************************************
  See if 2 SIDs are in the same domain
  this just compares the leading sub-auths