Loading src/secureid.c +17 −13 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ #include "assert.h" #include "stdio.h" #include "sys/mman.h" Loading Loading @@ -106,7 +107,7 @@ void initSID(struct SID **sid){ (*sid)->Revesion=1; (*sid)->SubAuthorityCount=1; setAuthority(*sid,NullAccount); setSubAuthority(*sid,0,0); setSubAuthority(*sid,0); }; void destroySID(struct SID *sid){ Loading Loading @@ -137,16 +138,22 @@ void setAuthority(struct SID *sid,Authority authority){ } } void setSubAuthority(struct SID *sid,uint32_t* uid,uint8_t count){ void setSubAuthority(struct SID *sid,uint32_t uid){ sid->SubAuthority[0]=uid; } void setDomainIndentfier(struct SID *sid,uint32_t* did,uint8_t count){ if(sid->SubAuthorityCount!=0){ munmap(sid->SubAuthority[1],(sizeof(uint32_t)*sid->SubAuthorityCount)); } if(sid->SubAuthority[0]==21){ sid->SubAuthority[1]=map32(sizeof(uint32_t)*count); memcpy32(sid->SubAuthority[1],uid, (count * sizeof(uint32_t))); memcpy32(sid->SubAuthority[1],did, (count * sizeof(uint32_t))); sid->SubAuthorityCount=count; }else{ assert("only SubAuthority with value 21 supports domain indentfier !"); } } int parseSID(struct SID *sid,const char *input,int size){ Loading Loading @@ -228,16 +235,13 @@ int printSID(struct SID *sid,char *output,int size){ void generateDomainIdentfier(uint32_t* output, int count){ //the last place will be used for the real user id --count; FILE *devrandom; devrandom = fopen("/dev/random","ro"); devrandom = fopen("/dev/random","r"); for(int i=0; i<count; ++i){ for(char ii=0; ii<sizeof(uint32_t); ++ii){ output[i]= output[i] | getc(devrandom); for(char ii=0; ii<sizeof(uint32_t); ii=ii+sizeof(char)){ output[i] |= getc(devrandom); } } Loading src/secureid.h +13 −3 Original line number Diff line number Diff line Loading @@ -118,13 +118,23 @@ extern "C" { void setAuthority(struct SID *sid,Authority authority); /*! \fn setSubAuthority(struct SID *sid,uint32_t* uid,uint8_t count) \fn setDomainIndentfier(struct SID *sid,uint32_t* did,uint8_t count) \brief This function will set your DomainIndentfier. \param sid SID struct set will be the value set \param did the indentifier of your domain \param count the indentifier array size */ void setDomainIndentfier(struct SID *sid,uint32_t* did,uint8_t count); /*! \fn setSubAuthority(struct SID *sid,uint32_t) \brief This function will set your SubAuthority. \param sid SID struct set will be the value set \param uid the indentifier array that will you set \param count the indentifier array size */ void setSubAuthority(struct SID *sid,uint32_t* uid,uint8_t count); void setSubAuthority(struct SID *sid,uint32_t uid); /*! \fn int parseSID(struct SID *sid,const char *input,int size) Loading test/gendomain.c +6 −5 Original line number Diff line number Diff line Loading @@ -35,20 +35,21 @@ int main(int argc, char *argv[]){ struct SID *sid; initSID(&sid); uint32_t ident[4]; uint32_t ident[3]; setAuthority(sid,NT); generateDomainIdentfier(ident,4); setSubAuthority(sid,21); setRid(sid,1001); generateDomainIdentfier(ident,3); setDomainIndentfier(sid,ident,3); setSubAuthority(sid,ident,4); setRid(sid,1001); printSID(sid,sidc,512); destroySID(sid); printf("%s",sidc); printf("%s \n",sidc); return 0; } Loading
src/secureid.c +17 −13 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *******************************************************************************/ #include "assert.h" #include "stdio.h" #include "sys/mman.h" Loading Loading @@ -106,7 +107,7 @@ void initSID(struct SID **sid){ (*sid)->Revesion=1; (*sid)->SubAuthorityCount=1; setAuthority(*sid,NullAccount); setSubAuthority(*sid,0,0); setSubAuthority(*sid,0); }; void destroySID(struct SID *sid){ Loading Loading @@ -137,16 +138,22 @@ void setAuthority(struct SID *sid,Authority authority){ } } void setSubAuthority(struct SID *sid,uint32_t* uid,uint8_t count){ void setSubAuthority(struct SID *sid,uint32_t uid){ sid->SubAuthority[0]=uid; } void setDomainIndentfier(struct SID *sid,uint32_t* did,uint8_t count){ if(sid->SubAuthorityCount!=0){ munmap(sid->SubAuthority[1],(sizeof(uint32_t)*sid->SubAuthorityCount)); } if(sid->SubAuthority[0]==21){ sid->SubAuthority[1]=map32(sizeof(uint32_t)*count); memcpy32(sid->SubAuthority[1],uid, (count * sizeof(uint32_t))); memcpy32(sid->SubAuthority[1],did, (count * sizeof(uint32_t))); sid->SubAuthorityCount=count; }else{ assert("only SubAuthority with value 21 supports domain indentfier !"); } } int parseSID(struct SID *sid,const char *input,int size){ Loading Loading @@ -228,16 +235,13 @@ int printSID(struct SID *sid,char *output,int size){ void generateDomainIdentfier(uint32_t* output, int count){ //the last place will be used for the real user id --count; FILE *devrandom; devrandom = fopen("/dev/random","ro"); devrandom = fopen("/dev/random","r"); for(int i=0; i<count; ++i){ for(char ii=0; ii<sizeof(uint32_t); ++ii){ output[i]= output[i] | getc(devrandom); for(char ii=0; ii<sizeof(uint32_t); ii=ii+sizeof(char)){ output[i] |= getc(devrandom); } } Loading
src/secureid.h +13 −3 Original line number Diff line number Diff line Loading @@ -118,13 +118,23 @@ extern "C" { void setAuthority(struct SID *sid,Authority authority); /*! \fn setSubAuthority(struct SID *sid,uint32_t* uid,uint8_t count) \fn setDomainIndentfier(struct SID *sid,uint32_t* did,uint8_t count) \brief This function will set your DomainIndentfier. \param sid SID struct set will be the value set \param did the indentifier of your domain \param count the indentifier array size */ void setDomainIndentfier(struct SID *sid,uint32_t* did,uint8_t count); /*! \fn setSubAuthority(struct SID *sid,uint32_t) \brief This function will set your SubAuthority. \param sid SID struct set will be the value set \param uid the indentifier array that will you set \param count the indentifier array size */ void setSubAuthority(struct SID *sid,uint32_t* uid,uint8_t count); void setSubAuthority(struct SID *sid,uint32_t uid); /*! \fn int parseSID(struct SID *sid,const char *input,int size) Loading
test/gendomain.c +6 −5 Original line number Diff line number Diff line Loading @@ -35,20 +35,21 @@ int main(int argc, char *argv[]){ struct SID *sid; initSID(&sid); uint32_t ident[4]; uint32_t ident[3]; setAuthority(sid,NT); generateDomainIdentfier(ident,4); setSubAuthority(sid,21); setRid(sid,1001); generateDomainIdentfier(ident,3); setDomainIndentfier(sid,ident,3); setSubAuthority(sid,ident,4); setRid(sid,1001); printSID(sid,sidc,512); destroySID(sid); printf("%s",sidc); printf("%s \n",sidc); return 0; }