password API needed

Luke Kenneth Casson Leighton lkcl at switchboard.net
Thu Jun 4 14:45:20 GMT 1998


danny,

the three functions at the bottom of this table are suggested extensions
(funnily enough, first made by jean francois six weeks ago: i considered
that this was not a Good Thing at the time...) to the password api.

as password.c calls smb_password_check() in password_ok(), i considered
that it would be best to pass in the username and the passwords to these
functions, then to return a struct smb_passwd (or struct passwd) iff the
username exists and the password is correct.

the unix_password_check() function is for clear-text cases; it is
completely irrelevant when "encrypted passwords = yes".  likewise,
smb_password_check() and smb_password_chal() and also NT domain logins are
completely irrelevant when "encrypted passwords = no".

what you reckon?  can you write these three functions into huji.c?

luke


/*
 * Each implementation of the password database code needs
 * to support the following operations.
 */

struct passdb_ops {
  /*
   * Password database ops.
   */
  void *(*startsmbpwent)(BOOL);
  void (*endsmbpwent)(void *);
  unsigned long (*getsmbpwpos)(void *);
  BOOL (*setsmbpwpos)(void *, unsigned long);

  /*
   * smb password database query functions.
   */
  struct smb_passwd *(*getsmbpwnam)(char *);
  struct smb_passwd *(*getsmbpwuid)(uid_t);
  struct smb_passwd *(*getsmbpwent)(void *);

  /*
   * smb password database modification functions.
   */
  BOOL (*add_smbpwd_entry)(struct smb_passwd *);
  BOOL (*mod_smbpwd_entry)(struct smb_passwd *, BOOL);

  /*
   * Functions that manupulate a struct sam_passwd.
   */
  struct sam_passwd *(*getsam21pwent)(void *);

  /*
   * sam password database query functions.
   */
  struct sam_passwd *(*getsam21pwnam)(char *);
  struct sam_passwd *(*getsam21pwuid)(uid_t);
  struct sam_passwd *(*getsam21pwrid)(uint32);

  /*
   * sam password database modification functions.
   */
  BOOL (*add_sam21pwd_entry)(struct sam_passwd *);
  BOOL (*mod_sam21pwd_entry)(struct sam_passwd *, BOOL);

  /*
   * sam query display info functions.
   */
  struct sam_disp_info *(*getsamdispnam)(char *);
  struct sam_disp_info *(*getsamdisprid)(uint32);
  struct sam_disp_info *(*getsamdispent)(void *);

  /*
   * password checking functions
   */
  struct smb_passwd *(*smb_password_chal  )(char *username, char lm_pass[24], char nt_pass[24], char chal[8]);
  struct smb_passwd *(*smb_password_check )(char *username, char lm_hash[16], char nt_hash[16],
  struct passwd     *(*unix_password_check)(char *username, char *pass, int pass_len);

};
~



More information about the samba-technical mailing list