usic_userauth.pl 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #!/usr/bin/perl -w
  2. # password checking utility, replacement of original usiccheckpasswd shell crap
  3. # usage:
  4. # usic_userauth <user>
  5. #
  6. # password read from stdin
  7. # return 0 on valid user & password, error otherwise
  8. #
  9. # author: sakib@meta.ua
  10. # USIC, 2012
  11. #
  12. # http://wiki.usic.org.ua/wiki/UMS_utilities
  13. #
  14. # VERSION 0.1
  15. #
  16. use strict;
  17. use warnings;
  18. use Sys::Syslog qw(:standard :macros);
  19. use lib qw( . /opt/usic/include/ );
  20. use Buscr;
  21. my $ldap_port=getservbyname("ldap", "tcp") || "389";
  22. my $debug_level=0;
  23. my $result = 0;
  24. my $user = shift;
  25. my $cfg_file = $ENV{USIC_CONF} || "/opt/usic/etc/config";
  26. openlog("UMS:usic_userauth", "ndelay.pid", LOG_USER);
  27. if ( &parse_cfg_file_params($cfg_file) ){
  28. syslog(LOG_ERR, "%s\n", &get_error_descr() );
  29. exit &exit_code("PARSE");
  30. }
  31. unless (defined $user) {
  32. syslog(LOG_ERR, "no username supplied\n");
  33. exit &exit_code("PARSE");
  34. }
  35. my $ldap_server = &get_cfg_file_params('server');
  36. my $base = &get_cfg_file_params('baseDN');
  37. my $dn = "uid=$user,$base";
  38. my $password = <STDIN>;
  39. chomp $password;
  40. my $ldap = new Net::LDAP( $ldap_server, port => $ldap_port, debug => $debug_level);
  41. $result = $ldap->bind($dn, password => $password);
  42. if ($result->code()){
  43. syslog(LOG_ERR,"could not bind to server %s on port %d : %s\n", $ldap_server, $ldap_port, $result->error_text());
  44. $result = "BIND";
  45. } else {
  46. $result = "SUCCESS";
  47. }
  48. $ldap->unbind();
  49. closelog();
  50. exit &exit_code($result);