Commit 8676c31d authored by jan.koester's avatar jan.koester
Browse files

better api

parent 0cf359d1
Loading
Loading
Loading
Loading
+17 −13
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *******************************************************************************/

#include "assert.h"
#include "stdio.h"

#include "sys/mman.h"
@@ -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){
@@ -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){
@@ -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);
        }
    }

+13 −3
Original line number Diff line number Diff line
@@ -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)
+6 −5
Original line number Diff line number Diff line
@@ -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;
}