Path: blob/main/comms/aprsd/files/patch-src_validate.cpp
16461 views
--- src/validate.cpp.orig 2003-03-31 04:49:41 UTC1+++ src/validate.cpp2@@ -34,6 +34,10 @@3#include <iostream>4#include <strstream>5#include <iomanip>6+#include <netdb.h>7+#if (defined(__unix__) || defined(unix)) && !defined(USG)8+#include <sys/param.h>9+#endif1011using namespace std;1213@@ -47,11 +51,17 @@ struct user_info {14const string group;15};16#else17+#ifdef BSD18+#include <pwd.h>19+#include <grp.h>20+#define MAXGROUPSIZE 102421+#else22#include <crypt.h>23#include <grp.h>24#include <pwd.h>25#include <shadow.h>26#endif27+#endif2829#include "validate.h"3031@@ -140,12 +150,21 @@ int checkSystemPass(const string szUser, const string32pam_end(pamh, PAM_SUCCESS);33return 0;34#else35+#ifdef BSD36passwd *ppw = NULL;37+ struct group *pgrp = NULL;38+ struct spwd *pspwd = NULL;39+ char *member = NULL;40+ struct group grp;41+ struct passwd pwd;42+#else43+ passwd *ppw = NULL;44group *pgrp = NULL;45spwd *pspwd = NULL;46char *member = NULL;47struct group grp;48struct passwd pwd;49+#endif50int i;51char salt[16];52int usrfound = 0 ;53@@ -158,7 +177,11 @@ int checkSystemPass(const string szUser, const string54#endif555657+#ifdef BSD58+ size_t bufsize=MAXGROUPSIZE;59+#else60size_t bufsize = sysconf(_SC_GETGR_R_SIZE_MAX);61+#endif62char *buffer1 = new char[bufsize];63//Thread-Safe getgrnam()64getgrnam_r(szGroup.c_str(), /* Does group name szGroup exist? */65@@ -168,12 +191,14 @@ int checkSystemPass(const string szUser, const string66&pgrp);6768if (pgrp == NULL) {69- delete buffer1;70+ delete[] buffer1;71return rc; /* return BADGROUP if not */72}73-74+#ifdef BSD75+ bufsize = MAXGROUPSIZE;76+#else77bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);78-79+#endif80char *buffer2 = new char[bufsize];81//Thread-Safe getpwnam()82getpwnam_r(szUser.c_str(),83@@ -183,8 +208,8 @@ int checkSystemPass(const string szUser, const string84&ppw);8586if (ppw == NULL){87- delete buffer2;88- delete buffer1;89+ delete[] buffer2;90+ delete[] buffer1;91return BADUSER ; /* return BADUSER if no such user */92}9394@@ -200,8 +225,8 @@ int checkSystemPass(const string szUser, const string95}9697if (usrfound == 0) {98- delete buffer1;99- delete buffer2;100+ delete[] buffer1;101+ delete[] buffer2;102return BADGROUP; /* return BADGROUP if user not in group */103}104105@@ -214,6 +239,7 @@ int checkSystemPass(const string szUser, const string106107pwLength = strlen(ppw->pw_passwd);108109+#if 0110if (ppw->pw_passwd[0] != '$') {111/* DES salt */112strncpy(salt,ppw->pw_passwd,2);113@@ -230,15 +256,18 @@ int checkSystemPass(const string szUser, const string114salt[i++] = '$';115salt[i] = '\0';116}117+#endif118+119#ifdef DEBUG120cout << "salt=" << salt << endl;121#endif122123- if (strcmp(crypt(szPass.c_str(), salt), ppw->pw_passwd) == 0 )124+ if (strcmp(crypt(szPass.c_str(), ppw->pw_passwd), ppw->pw_passwd) == 0 )125rc = 0;126else127rc = BADPASSWD;128129+#ifndef BSD /* BSD passwords are always shadowed */130if ((rc == BADPASSWD) && (strcmp("x",ppw->pw_passwd) == 0)) {131#ifdef DEBUG132cout << "Shadow passwords enabled\n";133@@ -246,8 +275,8 @@ int checkSystemPass(const string szUser, const string134pspwd = getspnam(szUser.c_str()); //Get shadow password file data for user135if (pspwd == NULL) {136cout << "validate: Can't read shadowed password file. This program must run as root\n";137- delete buffer1;138- delete buffer2;139+ delete[] buffer1;140+ delete[] buffer2;141return MUSTRUNROOT;142}143pwLength = strlen(pspwd->sp_pwdp);144@@ -288,8 +317,9 @@ int checkSystemPass(const string szUser, const string145<< endl;146#endif147}148- delete buffer1;149- delete buffer2;150+#endif151+ delete[] buffer1;152+ delete[] buffer2;153return rc;154#endif155}156157158