version 1.6.30.3, 2006/12/31 22:14:51 |
version 1.6.30.4, 2006/12/31 23:03:58 |
| |
// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN | // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN |
// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED | // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED |
// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT | // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT |
// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR | // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR |
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT | // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
// | // |
//============================================================================== | //============================================================================== |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
#include "cimservera.h" | #include "cimservera.h" |
#include <cstdio> | #include <cstdio> |
| #include <syslog.h> |
| |
| static void Exit(int status) |
| { |
| if (status == 0) |
| syslog(LOG_INFO, "exiting with status=%d", status); |
| else |
| syslog(LOG_WARNING, "exiting with status=%d", status); |
| |
| exit(status); |
| } |
| |
int main(int argc, char* argv[]) | int main(int argc, char* argv[]) |
{ | { |
| // Open syslog: |
| |
| openlog("cimservera", 0, LOG_AUTH); |
| syslog(LOG_INFO, "started"); |
| |
| // ATTN: Insert fingerprint logic to detect running of this program as |
| // non-child of executor. |
| |
// Check argumnents. | // Check argumnents. |
| |
if (argc != 2) | if (argc != 2) |
{ | { |
fprintf(stderr, "Usage: %s <socket-number>\n", argv[0]); | fprintf(stderr, "Usage: %s <socket-number>\n", argv[0]); |
exit(1); | Exit(1); |
} | } |
| |
// Open socket stream. | // Open socket stream. |
| |
int sock; | int sock; |
{ | { |
char* end; | char* end; |
long x = strtoul(argv[1], &end, 10); | long x = strtoul(argv[1], &end, 10); |
| |
if (*end != '\0') | if (*end != '\0') |
{ | { |
fprintf(stderr, "%s : bad socket argument: %s\n", argv[0], argv[1]); | fprintf(stderr, "%s : bad socket argument: %s\n", argv[0], argv[1]); |
exit(1); | Exit(1); |
} | } |
| |
sock = int(x); | sock = int(x); |
} | } |
| |
// Wait on request. | // Wait on request. |
| |
CimserveraRequest request; | CimserveraRequest request; |
| |
// Wait on request. | // Wait on request. |
if (Recv(sock, &request, sizeof(request)) != sizeof(request)) | if (Recv(sock, &request, sizeof(request)) != sizeof(request)) |
{ | { |
close(sock); | close(sock); |
return -1; | Exit(1); |
} | } |
| |
if (strcmp(request.arg0, "authenticate") == 0) | if (strcmp(request.arg0, "authenticate") == 0) |
{ | { |
int status = PAMAuthenticate(request.arg1, request.arg2); | int status = PAMAuthenticateInProcess(request.arg1, request.arg2); |
| |
| if (status != 0) |
| { |
| syslog(LOG_WARNING, "PAM authentication failed on user \"%s\"", |
| request.arg1); |
| } |
| |
Send(sock, &status, sizeof(status)); | Send(sock, &status, sizeof(status)); |
} | } |
else if (strcmp(request.arg0, "validateUser") == 0) | else if (strcmp(request.arg0, "validateUser") == 0) |
{ | { |
int status = PAMValidateUser(request.arg1); | int status = PAMValidateUserInProcess(request.arg1); |
| |
| if (status != 0) |
| { |
| syslog(LOG_WARNING, "PAM user validation failed on user \"%s\"", |
| request.arg1); |
| } |
| |
Send(sock, &status, sizeof(status)); | Send(sock, &status, sizeof(status)); |
} | } |
else | else |
{ | { |
fprintf(stderr, "%s: bad request\n", argv[0]); | syslog(LOG_WARNING, "invalid request"); |
close(sock); | close(sock); |
exit(1); | Exit(1); |
} | } |
| |
close(sock); | close(sock); |
| |
exit(0); | Exit(0); |
return 0; | |
} | } |