status_t GIDToName(void* buffer) { gid_t groupId = *reinterpret_cast<gid_t*>(buffer); const char* name = NULL; struct group* groupInfo = getgrgid(groupId); if (groupInfo != NULL) { name = groupInfo->gr_name; name = AddDomain(name); } status_t result; if (name != NULL) { result = write_port(gReplyPort, MsgReply, name, strlen(name) + 1); free(const_cast<char*>(name)); } else { result = write_port(gReplyPort, MsgReply, kNogroupName, strlen(kNogroupName) + 1); } return result; }
status_t UIDToName(void* buffer) { uid_t userId = *reinterpret_cast<uid_t*>(buffer); const char* name = NULL; struct passwd* userInfo = getpwuid(userId); if (userInfo != NULL) { name = userInfo->pw_name; name = AddDomain(name); } status_t result; if (name != NULL) { result = write_port(gReplyPort, MsgReply, name, strlen(name) + 1); free(const_cast<char*>(name)); } else { result = write_port(gReplyPort, MsgReply, kNobodyName, strlen(kNobodyName) + 1); } return result; }
int CDomainContainer::AddDomain( LPCTSTR lpszDomainName ) { if( NULL == lpszDomainName || strlen(lpszDomainName) <=0 ) return -1; CDomain newdomain; newdomain.m_strName = lpszDomainName; return AddDomain( newdomain ); }
BOOL CDomainContainer::Load( LPCTSTR lpszFileName ) { if( NULL == lpszFileName || strlen(lpszFileName) <= 0 ) return FALSE; BOOL bOK = FALSE; CSPFile file; if( file.Open( lpszFileName, CSPFile::modeRead ) ) { DWORD dwLen = file.GetLength(); if( 0 == dwLen || dwLen > SF_MAX_DOMAINFILE_LENGTH ) { file.Close(); return FALSE; } SetSize( 0, min(dwLen / 300, 20) ); CDomain domain; CSPString rString; while( file.ReadString( rString ) ) { int nIndex = rString.Find( "\r" ); if( -1 == nIndex ) nIndex = rString.Find( "\n" ); if( -1 != nIndex ) rString = rString.Left( nIndex ); rString.TrimLeft(); rString.TrimRight(); if( rString.GetLength() > 0 ) { if( domain.m_strName.IsEmpty() ) // 新版块名称 domain.m_strName = rString; else domain.AddStock( rString ); } else { // 版块结束 if( !domain.m_strName.IsEmpty() ) AddDomain( domain ); domain.m_strName.Empty(); domain.RemoveAll(); } } if( !domain.m_strName.IsEmpty() ) Add( domain ); domain.m_strName.Empty(); domain.RemoveAll(); file.Close(); bOK = TRUE; } return bOK; }
//=============================================================================* void BAR_DomainList::ParseDomainList(char* pszText, const DWORD dwSize) //=============================================================================* { //=== build a new domain list m_vecDomainNames.clear(); if ( pszText == NULL ) return; char szTokenBuf[1024]; szTokenBuf[0] = '\0'; //=== scan contents of list file DWORD dwLineStart = 0; int iLines = 0; char chSep = ';'; bool bLookForSep = true; //=== loop over bytes for(DWORD i = 0; i < dwSize; i++) { //=== end of line: now look for separator if ( pszText[i] == '\n' ) { dwLineStart = i + 1; bLookForSep = true; } //=== separator: extract domain name and go to next line else if ( bLookForSep && pszText[i] == chSep ) { size_t sizeToken = i - dwLineStart; strncpy(szTokenBuf, &pszText[dwLineStart], sizeToken); szTokenBuf[sizeToken] = '\0'; AddDomain(szTokenBuf); bLookForSep = false; } } return; }