// gesperrte Benutzer anzeigen / borwinius 2005 #include #include #include #include #include #include #include #include #include void MySnd(char *, char *, char *, char *); //Mail per SMTP senden #define laenge 256 TCHAR szStr[1024], szStrRcv[1024 * 1024], szResult[1024 * 50]; char buf[255],buf2[255];// LPSTR lpstrBuf; double tage; // hier eigene Werte eintragen! TCHAR szSender[laenge] = "hausnetz@dom.ain"; TCHAR szXmailer[laenge] = "automatischer Mailer copyright "; TCHAR lpszTo[laenge] = "hausnetz@dom.ain"; TCHAR lpszServer[laenge] = "smtpServerNameoderIP"; TCHAR szUeberschrift[laenge]= "gesperrte Benutzer"; //------------------------------------------------------------------ int main(void) { IADs *pADs; IADsContainer * pCont; IADsUser *pADsUser; BSTR bstr; HRESULT hr; VARIANT vChild;//, var; short bo; BOOL bgesperrt = 0; // Initialize COM before calling any ADSI functions or interfaces. hr = CoInitialize(NULL); if (hr != S_OK) { return 0; } // hier eigene Werte eintragen ! hr = ADsGetObject( L"WinNT://myNTDomain", &IID_IADsContainer, (void**) &pCont); if( hr==S_OK) { IEnumVARIANT * pEnum; ADsBuildEnumerator (pCont,&pEnum); while((hr = ADsEnumerateNext (pEnum, 1, &vChild, NULL)) == S_OK) { if(hr!=S_OK) break; hr = vChild.pdispVal->QueryInterface (&IID_IADsUser,(void**)&pADsUser); if(hr!=S_OK) break; VariantClear(&vChild); if(hr!=S_OK) break; hr = pADsUser->QueryInterface(&IID_IADs, (void**) &pADs); if(hr!=S_OK) break; if( S_OK == pADs->get_Name(&bstr) ) { //-------------------------------------------------- //hr = pADsUser->get_PasswordExpirationDate(&date); //hr = pADsUser->get_AccountDisabled( hr = pADsUser->get_IsAccountLocked(&bo); if (SUCCEEDED(hr)) { if (bo) { bgesperrt = 1; WideCharToMultiByte(CP_ACP, 0, bstr, -1, buf, sizeof( buf),NULL,NULL); strcat(buf," gesperrt\n\n"); strcat(buf2,buf); // printf("buf2 %s\n",buf2); SysFreeString(bstr); } } } //-------------------------------------------------- pADsUser->Release(); pADs->Release(); } // SysFreeString(bstr); ADsFreeEnumerator(pEnum); pCont->Release(); } if (bgesperrt == 1) { MySnd(lpszServer,lpszTo, szUeberschrift, buf2); // Email an hausnetzadmin senden //MySnd(lpszServer,"zweiterEmpfänger@dom.ain", szUeberschrift, buf2); // Email an zweiten Empfänger senden } CoUninitialize(); return 1; } //------------------------------------------------------------- //SMTP-Mailfunktion void MySnd(char *lpszServer , char *lpszTo, char *lpszSubject, char *lpszMail) { WSADATA wsaData; LPHOSTENT lpHost; LPSERVENT lpServ; SOCKET s; int iProtocolPort; SOCKADDR_IN sockadd; char *seps = "\r", *token; if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) { printf("WSAStartup \tError\n"); return; } if (strcmp(lpszServer, "") == 0) { printf("kein szServerName ? \tFehler\n"); return ; } lpHost = gethostbyname(lpszServer); if (lpHost == NULL) { printf("%s existiert nicht oder kann nicht aufgelöst werden", lpszServer); return; } s = socket(PF_INET, SOCK_STREAM, 0); if (s == INVALID_SOCKET) { printf("INVALID_SOCKET \tError\n"); return; } lpServ = getservbyname("mail", NULL); // SMTPPort ermitteln if (lpServ == NULL) { printf("getservbyname\n"); iProtocolPort = htons(IPPORT_SMTP); } else { iProtocolPort = lpServ->s_port; } sockadd.sin_family = AF_INET; sockadd.sin_port = iProtocolPort; sockadd.sin_addr = *((LPIN_ADDR)*lpHost->h_addr_list); if (connect(s, (PSOCKADDR)&sockadd, sizeof(sockadd))) { printf("Socket connect \tError\n"); return; } memset(szStrRcv, '\0', sizeof(szStrRcv)); recv(s, szStrRcv, sizeof(szStrRcv), 0); //printf("%s\n",szStrRcv); strcpy(szStr, "HELO "); // Verbindung mit Server herstellen strcat(szStr, lpszServer); strcat(szStr, "\r\n"); send(s, szStr, strlen(szStr), 0); memset(szStrRcv, '\0', sizeof(szStrRcv)); recv(s, szStrRcv, sizeof(szStrRcv), 0); // printf("%s\n",szStrRcv); if (strcmp(szSender, "") == 0) { printf("kein Absender ? \t Fehler \n"); return ; } wsprintf(szStr, "MAIL FROM: <%s>\r\n", szSender); // Absender angeben send(s, szStr, strlen(szStr), 0); memset(szStrRcv, '\0', sizeof(szStrRcv)); recv(s, szStrRcv, sizeof(szStrRcv), 0); // printf("%s\n",szStrRcv); wsprintf(szStr, "RCPT TO:<%s>\r\n", lpszTo); // Empfänger angeben send(s, szStr, strlen(szStr), 0); memset(szStrRcv, '\0', sizeof(szStrRcv)); recv(s, szStrRcv, sizeof(szStrRcv), 0); // printf("%s\n",lpszTo);//szStrRcv); /* wsprintf(szStr, "RCPT TO:\r\n"); // Empfänger 2 (bcc)angeben send(s, szStr, strlen(szStr), 0); memset(szStrRcv, '\0', sizeof(szStrRcv)); recv(s, szStrRcv, sizeof(szStrRcv), 0); printf("%s\n",szStrRcv); */ strcpy(szStr, "DATA\r\n"); //Daten übergeben send(s, szStr, strlen(szStr), 0); memset(szStrRcv, '\0', sizeof(szStrRcv)); recv(s, szStrRcv, sizeof(szStrRcv), 0); // printf("%s\n",szStrRcv); strcpy(szStr, "X-Mailer: "); lstrcat(szStr,szXmailer);lstrcat(szStr,"\r\n"); send(s, szStr, strlen(szStr), 0); strcpy(szStr, "From: "); lstrcat(szStr,szSender);lstrcat(szStr,"\r\n"); send(s, szStr, strlen(szStr), 0); strcpy(szStr, "To: "); lstrcat(szStr,lpszTo);lstrcat(szStr,"\r\n"); send(s, szStr, strlen(szStr), 0); wsprintf(szStr, "Subject: %s \r\n", lpszSubject); // Betreff send(s, szStr, strlen(szStr), 0); strcpy(szStr, "\r\n"); send(s, szStr, strlen(szStr), 0); token = strtok(lpszMail, seps); while (token != NULL) { if (token[0] == '\n') { strcpy(szStr, token + 1); } else { strcpy(szStr, token); } strcat(szStr, "\r\n"); send(s, szStr, strlen(szStr), 0); token = strtok(NULL, seps); } strcpy(szStr, ".\r\n"); // Ende der Daten send(s, szStr, strlen(szStr), 0); memset(szStrRcv, '\0', sizeof(szStrRcv)); recv(s, szStrRcv, sizeof(szStrRcv), 0); // printf("%s\n",szStrRcv); strcpy(szStr, "QUIT\r\n"); // Ende der Verbindung send(s, szStr, strlen(szStr), 0); memset(szStrRcv, '\0', sizeof(szStrRcv)); recv(s, szStrRcv, sizeof(szStrRcv), 0); // printf("%s\n",szStrRcv); closesocket(s); WSACleanup(); // printf("keine Verbindung mehr \n"); return; } //-----------------------------------------------------------------