Google

diff -dbwpr ../openssh-3.8.1p1.orig/auth.c ./auth.c
*** ../openssh-3.8.1p1.orig/auth.c	Sat Feb 21 17:43:15 2004
--- ./auth.c	Wed Jan 12 11:27:01 2005
*************** RCSID("$OpenBSD: auth.c,v 1.51 2003/11/2
*** 36,41 ****
--- 36,45 ----
  #include <libgen.h>
  #endif
  
+ #ifdef __APPLE_SACL__
+ #include <membershipPriv.h>
+ #endif
+ 
  #include "xmalloc.h"
  #include "match.h"
  #include "groupaccess.h"
*************** allowed_user(struct passwd * pw)
*** 204,209 ****
--- 208,251 ----
  		ga_free();
  	}
  
+ 	if( options.sacl_support )
+ 	{
+ #ifdef __APPLE_SACL__
+ 		/*
+ 	 	* Here we check with memberd if the Service ACLs allow this user to
+ 	 	* use the ssh service.
+ 	 	*/
+ 
+ 		debug("Checking with Service ACLs for ssh login restrictions");
+ 
+ 		uuid_t user_uuid;
+ 		int isMember = 0;
+ 		int mbrErr = 0;
+ 	
+ 		// get the uuid
+ 		if ( mbr_user_name_to_uuid(pw->pw_name, user_uuid) )
+ 		{
+ 			debug("call to mbr_user_name_to_uuid with <%s> failed to retrieve user_uuid", pw->pw_name);
+ 			return 0;
+ 		}	
+ 		debug("call to mbr_user_name_to_uuid with <%s> suceeded to retrieve user_uuid", pw->pw_name);
+ 	
+ 		// check the sacl
+ 		if((mbrErr = mbr_check_service_membership(user_uuid, "ssh", &isMember)))
+ 		{
+ 			debug("Called mbr_check_service_membership with isMember <%d> with status <%d>", isMember, mbrErr);
+ 			if(mbrErr == ENOENT)	// no ACL exists
+ 			{
+ 				return 1;	
+ 			} else {
+ 				return 0;
+ 			}
+ 		}
+ 		debug("Call to mbr_check_service_membership failed with status <%d>", mbrErr);
+ 		return isMember;
+ #endif /* __APPLE_SACL__ */
+ 	}
+ 
  #ifdef WITH_AIXAUTHENTICATE
  	/*
  	 * Don't check loginrestrictions() for root account (use
diff -dbwpr ../openssh-3.8.1p1.orig/servconf.c ./servconf.c
*** ../openssh-3.8.1p1.orig/servconf.c	Fri Jan 23 06:03:10 2004
--- ./servconf.c	Wed Jan 12 11:31:01 2005
*************** initialize_server_options(ServerOptions 
*** 81,86 ****
--- 81,87 ----
  	options->permit_empty_passwd = -1;
  	options->permit_user_env = -1;
  	options->use_login = -1;
+ 	options->sacl_support = -1;
  	options->compression = -1;
  	options->allow_tcp_forwarding = -1;
  	options->num_allow_users = 0;
*************** typedef enum {
*** 268,273 ****
--- 269,275 ----
  	sClientAliveCountMax, sAuthorizedKeysFile, sAuthorizedKeysFile2,
  	sGssAuthentication, sGssCleanupCreds,
  	sUsePrivilegeSeparation,
+ 	sSACLSupport,
  	sDeprecated, sUnsupported
  } ServerOpCodes;
  
*************** static struct {
*** 366,371 ****
--- 368,374 ----
  	{ "authorizedkeysfile", sAuthorizedKeysFile },
  	{ "authorizedkeysfile2", sAuthorizedKeysFile2 },
  	{ "useprivilegeseparation", sUsePrivilegeSeparation},
+ 	{ "saclsupport", sSACLSupport },
  	{ NULL, sBadOption }
  };
  
*************** parse_flag:
*** 688,693 ****
--- 691,700 ----
  		charptr = &options->xauth_location;
  		goto parse_filename;
  
+ 	case sSACLSupport:
+ 		intptr = &options->sacl_support;
+ 		goto parse_flag;
+ 
  	case sStrictModes:
  		intptr = &options->strict_modes;
  		goto parse_flag;
diff -dbwpr ../openssh-3.8.1p1.orig/servconf.h ./servconf.h
*** ../openssh-3.8.1p1.orig/servconf.h	Tue Dec 30 19:37:34 2003
--- ./servconf.h	Tue Jan 11 16:49:20 2005
*************** typedef struct {
*** 125,130 ****
--- 125,131 ----
  	char   *authorized_keys_file;	/* File containing public keys */
  	char   *authorized_keys_file2;
  	int	use_pam;		/* Enable auth via PAM */
+ 	int	sacl_support;		/* Enable use of SACLs */
  }       ServerOptions;
  
  void	 initialize_server_options(ServerOptions *);
diff -dbwpr ../openssh-3.8.1p1.orig/sshd_config ./sshd_config
*** ../openssh-3.8.1p1.orig/sshd_config	Tue Dec 30 19:38:32 2003
--- ./sshd_config	Tue Jan 11 17:01:58 2005
***************
*** 54,59 ****
--- 54,62 ----
  #PasswordAuthentication yes
  #PermitEmptyPasswords no
  
+ # SACL options
+ #SACLSupport yes
+ 
  # Change to no to disable s/key passwords
  #ChallengeResponseAuthentication yes
  


syntax highlighted by Code2HTML, v. 0.9.1