version 1.6.30.4, 2006/12/31 23:03:58 |
version 1.6.30.5, 2007/01/01 18:34:35 |
| |
// 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> | #include <syslog.h> |
| |
static void Exit(int status) | static void Exit(int status) |
{ | { |
if (status == 0) | syslog(LOG_INFO, "exit(%d)", status); |
syslog(LOG_INFO, "exiting with status=%d", status); | |
else | |
syslog(LOG_WARNING, "exiting with status=%d", status); | |
| |
exit(status); | exit(status); |
} | } |
| |
int main(int argc, char* argv[]) | int main(int argc, char* argv[]) |
{ | { |
// Open syslog: | // Open syslog: |
| |
openlog("cimservera", 0, LOG_AUTH); | openlog("cimservera", LOG_PID, LOG_AUTH); |
syslog(LOG_INFO, "started"); | syslog(LOG_INFO, "started"); |
| |
// ATTN: Insert fingerprint logic to detect running of this program as | // ATTN: Insert fingerprint logic to detect running of this program as |
// non-child of executor. | // 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. |
| |
| |
{ | { |
close(sock); | close(sock); |
Exit(1); | Exit(1); |
} | } |
| |
if (strcmp(request.arg0, "authenticate") == 0) | if (strcmp(request.arg0, "authenticate") == 0) |
{ | { |
int status = PAMAuthenticateInProcess(request.arg1, request.arg2); | int status = PAMAuthenticateInProcess(request.arg1, request.arg2); |
| |
if (status != 0) | if (status != 0) |
{ | { |
syslog(LOG_WARNING, "PAM authentication failed on user \"%s\"", | syslog(LOG_WARNING, "PAM authentication failed on user \"%s\"", |
request.arg1); | request.arg1); |
} | } |
| |
Send(sock, &status, sizeof(status)); | Exit(status == 0 ? 0 : 1); |
} | } |
else if (strcmp(request.arg0, "validateUser") == 0) | else if (strcmp(request.arg0, "validateUser") == 0) |
{ | { |
int status = PAMValidateUserInProcess(request.arg1); | int status = PAMValidateUserInProcess(request.arg1); |
| |
if (status != 0) | if (status != 0) |
{ | { |
syslog(LOG_WARNING, "PAM user validation failed on user \"%s\"", | syslog(LOG_WARNING, "PAM user validation failed on user \"%s\"", |
request.arg1); | request.arg1); |
} | } |
| |
Send(sock, &status, sizeof(status)); | Exit(status == 0 ? 0 : 1); |
} | } |
else | else |
{ | { |
syslog(LOG_WARNING, "invalid request"); | syslog(LOG_WARNING, "invalid request"); |
close(sock); | close(sock); |
Exit(1); | Exit(1); |
} | } |
| |
close(sock); | close(sock); |
| |
Exit(0); | Exit(0); |
} | } |