static int deleteservice(char *account) { SC_HANDLE service, scm; int ret=1, i; char username[80]; strcpy(username, account); parse_username(username); sfsprintf(servname, sizeof(servname),"UWIN_CS%s", username); sfsprintf(servdname, sizeof(servdname),"UWIN Client(%s)", username); for(i=0;i<(signed)strlen(servname);i++) if(servname[i] == '/') servname[i]= '#'; scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (scm) { service = OpenService(scm, servname, SERVICE_ALL_ACCESS); if (service) { if(DeleteService(service)) logmsg(1, "%s deleted", servdname); else { logerr(LOG_STDERR+0, "delete %s failed", servdname); ret = 0; } } else { logerr(LOG_STDERR+0, "%s service open failed", servdname); ret = 0; } CloseServiceHandle(scm); } else { logerr(LOG_STDERR+0, "OpenSCManager failed"); return(0); } return(ret); }
void getservname(void) { DWORD ret,i; HANDLE tok; char tmpbuf[1024], UserName[256], RefDomain[256]; PTOKEN_USER UserToken = (PTOKEN_USER)tmpbuf; DWORD RetLen=1024, UserNameLen, RefDomainLen; SID_NAME_USE SidType; if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &tok)) { if ((ret = GetTokenInformation(tok, TokenUser, UserToken, RetLen, &RetLen))) { UserNameLen = sizeof(UserName); RefDomainLen = sizeof(RefDomain); if ((ret = LookupAccountSid(NULL,UserToken->User.Sid,UserName,&UserNameLen,RefDomain,&RefDomainLen,&SidType))) { strcat(RefDomain,"/"); strcat(RefDomain,UserName); parse_username(RefDomain); sfsprintf(servname, sizeof(servname),"UWIN_CS%s", RefDomain); sfsprintf(servdname, sizeof(servdname),"UWIN Client(%s)", RefDomain); strcpy(evename,RefDomain); strcat(evename,"event"); for(i=0;i<strlen(servname);i++) if(servname[i] == '/') servname[i]= '#'; { unsigned char *ptr; for(ptr=(unsigned char *)evename; *ptr ; ptr++) *ptr=tolower(*ptr); } } else logerr(1, "LookupAccountSid failed in getservname"); } else logerr(1, "GetTokenInformation failed in getservname"); } else logerr(1, "OpenProcessToken failed in getservname"); }
/* * Parse Digest credentials parameter, one by one */ static inline int parse_digest_params(str* _s, dig_cred_t* _c) { char* comma; do { /* Parse the first parameter */ if (parse_digest_param(_s, _c) < 0) { return -1; } /* Try to find the next parameter */ comma = q_memchr(_s->s, ',', _s->len); if (comma) { /* Yes, there is another, * remove any leading white-spaces * and let _s point to the next * parameter name */ _s->len -= comma - _s->s + 1; _s->s = comma + 1; trim_leading(_s); } } while(comma); /* Repeat while there are next parameters */ /* Parse QOP body if the parameter was present */ if (_c->qop.qop_str.s != 0) { parse_qop(&_c->qop); } /* Parse algorithm body if the parameter was present */ if (_c->alg.alg_str.s != 0) { parse_algorithm(&_c->alg); } if (_c->username.whole.s != 0) { parse_username(&_c->username); } return 0; }