summaryrefslogtreecommitdiff
path: root/source3/lib/util_sid.c
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2010-01-23 15:24:20 +0100
committerVolker Lendecke <vl@samba.org>2010-01-23 16:28:12 +0100
commitdff03b61fd5d923562711b38cc7dbe996dc07283 (patch)
tree42f6664b83c551774c6a51b8c59de8a2fcdf24df /source3/lib/util_sid.c
parent397a6faed9061a6b814cc173cfe4056947ad88aa (diff)
downloadsamba-dff03b61fd5d923562711b38cc7dbe996dc07283.tar.gz
s3: Make string_to_sid a wrapper around dom_sid_parse
Diffstat (limited to 'source3/lib/util_sid.c')
-rw-r--r--source3/lib/util_sid.c57
1 files changed, 7 insertions, 50 deletions
diff --git a/source3/lib/util_sid.c b/source3/lib/util_sid.c
index 20c2663de95..ea66dbfa6d6 100644
--- a/source3/lib/util_sid.c
+++ b/source3/lib/util_sid.c
@@ -23,6 +23,7 @@
*/
#include "includes.h"
+#include "libcli/security/dom_sid.h"
/*
* Some useful sids, more well known sids can be found at
@@ -217,58 +218,14 @@ char *sid_string_tos(const DOM_SID *sid)
Convert a string to a SID. Returns True on success, False on fail.
*****************************************************************/
-bool string_to_sid(DOM_SID *sidout, const char *sidstr)
+bool string_to_sid(struct dom_sid *sidout, const char *sidstr)
{
- const char *p;
- char *q;
- /* BIG NOTE: this function only does SIDS where the identauth is not >= 2^32 */
- uint32 conv;
-
- if ((sidstr[0] != 'S' && sidstr[0] != 's') || sidstr[1] != '-') {
- DEBUG(3,("string_to_sid: Sid %s does not start with 'S-'.\n", sidstr));
- return False;
+ if (!dom_sid_parse(sidstr, sidout)) {
+ DEBUG(3, ("string_to_sid: Sid %s is not in a valid format.\n",
+ sidstr));
+ return false;
}
-
- ZERO_STRUCTP(sidout);
-
- /* Get the revision number. */
- p = sidstr + 2;
- conv = (uint32) strtoul(p, &q, 10);
- if (!q || (*q != '-')) {
- DEBUG(3,("string_to_sid: Sid %s is not in a valid format.\n", sidstr));
- return False;
- }
- sidout->sid_rev_num = (uint8) conv;
- q++;
-
- /* get identauth */
- conv = (uint32) strtoul(q, &q, 10);
- if (!q || (*q != '-')) {
- DEBUG(0,("string_to_sid: Sid %s is not in a valid format.\n", sidstr));
- return False;
- }
- /* identauth in decimal should be < 2^32 */
- /* NOTE - the conv value is in big-endian format. */
- sidout->id_auth[0] = 0;
- sidout->id_auth[1] = 0;
- sidout->id_auth[2] = (conv & 0xff000000) >> 24;
- sidout->id_auth[3] = (conv & 0x00ff0000) >> 16;
- sidout->id_auth[4] = (conv & 0x0000ff00) >> 8;
- sidout->id_auth[5] = (conv & 0x000000ff);
-
- q++;
- sidout->num_auths = 0;
-
- for(conv = (uint32) strtoul(q, &q, 10);
- q && (*q =='-' || *q =='\0') && (sidout->num_auths < MAXSUBAUTHS);
- conv = (uint32) strtoul(q, &q, 10)) {
- sid_append_rid(sidout, conv);
- if (*q == '\0')
- break;
- q++;
- }
-
- return True;
+ return true;
}
/*****************************************************************