4 assumes x86 CPU. This code is NOT portable.
6 tridge@samba.org, December 2003
10 #include <sys/types.h>
18 typedef unsigned char uint8;
19 typedef unsigned int uint32;
32 static void display_sid(const char *blob, off_t size)
34 struct dom_sid *sid = (struct dom_sid *)blob;
38 if (size < sizeof(*sid) ||
40 sid->conf_size != sid->num_auths ||
42 size != sizeof(*sid) + 4*sid->num_auths) {
43 printf("Bad sid blob - maybe its not a IDL conformant SID?\n");
47 ia = (sid->id_auth[5]) +
48 (sid->id_auth[4] << 8 ) +
49 (sid->id_auth[3] << 16) +
50 (sid->id_auth[2] << 24);
52 printf("S-%u-%u", (unsigned)sid->sid_rev_num, (unsigned)ia);
54 for (i=0;i<sid->num_auths;i++) {
55 printf("-%u", (unsigned)sid->sub_auths[i]);
61 static const char *file_load(const char *filename, off_t *size)
67 fd = open(filename, O_RDONLY);
68 if (fd == -1) return NULL;
72 ret = malloc(st.st_size);
73 if (!ret) return NULL;
75 if (read(fd, ret, st.st_size) != st.st_size) {
85 int main(int argc, const char *argv[])
92 fprintf(stderr,"Usage: display_sid <filename>\n");
98 blob = file_load(filename, &size);
104 display_sid(blob, size);