Merge pull request #192 from DerDackel/ldapssl
Add LDAP over SSL support
This commit is contained in:
		
						commit
						7869cfccb9
					
				|  | @ -0,0 +1,26 @@ | |||
| [unix_http_server] | ||||
| file=/tmp/supervisor.sock                       ; path to your socket file | ||||
| 
 | ||||
| [supervisord] | ||||
| logfile=log/supervisord.log                    ; supervisord log file | ||||
| logfile_maxbytes=50MB                           ; maximum size of logfile before rotation | ||||
| logfile_backups=10                              ; number of backed up logfiles | ||||
| loglevel=warn                                   ; info, debug, warn, trace | ||||
| pidfile=/tmp/supervisord.pid                    ; pidfile location | ||||
| nodaemon=false                                  ; run supervisord as a daemon | ||||
| minfds=1024                                     ; number of startup file descriptors | ||||
| minprocs=200                                    ; number of process descriptors | ||||
| user=root                                       ; default user | ||||
| childlogdir=log | ||||
| 
 | ||||
| [rpcinterface:supervisor] | ||||
| supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface | ||||
| 
 | ||||
| [supervisorctl] | ||||
| serverurl=unix:///tmp/supervisor.sock           ; use a unix:// URL  for a unix socket | ||||
| 
 | ||||
| [program:gogs] | ||||
| command = /root/Developer/gopath/src/github.com/gogits/gogs/start.sh	; here must be the real url, not ~ or $GOROOT like | ||||
| autostart = true | ||||
| stdout_logfile = log/supervisor-gogs-stderr.log | ||||
| stderr_logfile = log/supervisor-gogs-error.log | ||||
|  | @ -0,0 +1,42 @@ | |||
| #!/bin/sh | ||||
| 
 | ||||
| echo 'plase remember to modify the command path in etc/conf/supervisord.conf(line 23)' | ||||
| 
 | ||||
| PID="/tmp/supervisord.pid" | ||||
| CONF="conf/etc/supervisord.conf" | ||||
| 
 | ||||
| LOGDIR="log"   | ||||
| if [ ! -d $LOGDIR ]; then   | ||||
|     mkdir $LOGDIR | ||||
| fi | ||||
| 
 | ||||
| stop() { | ||||
|     if [ -f $PID ]; then | ||||
|         kill `cat -- $PID` | ||||
|         rm -f -- $PID | ||||
|         echo "stopped" | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| start() { | ||||
|     echo "starting" | ||||
|     if [ ! -f $PID ]; then | ||||
|         supervisord -c $CONF | ||||
|         echo "started" | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| case "$1" in | ||||
|     start) | ||||
|         start | ||||
|         ;; | ||||
|     stop) | ||||
|         stop | ||||
|         ;; | ||||
|     restart) | ||||
|         stop | ||||
|         start | ||||
|         ;; | ||||
|     *) | ||||
|         echo "Usage: $0 {start|stop|restart}" | ||||
| esac | ||||
|  | @ -21,6 +21,7 @@ type AuthenticationForm struct { | |||
| 	Domain            string `form:"domain"` | ||||
| 	Host              string `form:"host"` | ||||
| 	Port              int    `form:"port"` | ||||
| 	UseSSL            bool   `form:"usessl"` | ||||
| 	BaseDN            string `form:"base_dn"` | ||||
| 	Attributes        string `form:"attributes"` | ||||
| 	Filter            string `form:"filter"` | ||||
|  | @ -39,6 +40,7 @@ func (f *AuthenticationForm) Name(field string) string { | |||
| 		"Domain":     "Domain name", | ||||
| 		"Host":       "Host address", | ||||
| 		"Port":       "Port Number", | ||||
| 		"UseSSL":     "Use SSL", | ||||
| 		"BaseDN":     "Base DN", | ||||
| 		"Attributes": "Search attributes", | ||||
| 		"Filter":     "Search filter", | ||||
|  |  | |||
|  | @ -18,6 +18,7 @@ type Ldapsource struct { | |||
| 	Name         string // canonical name (ie. corporate.ad)
 | ||||
| 	Host         string // LDAP host
 | ||||
| 	Port         int    // port number
 | ||||
| 	UseSSL       bool   // Use SSL
 | ||||
| 	BaseDN       string // Base DN
 | ||||
| 	Attributes   string // Attribut to search
 | ||||
| 	Filter       string // Query filter to validate entry
 | ||||
|  | @ -31,8 +32,8 @@ var ( | |||
| ) | ||||
| 
 | ||||
| // Add a new source (LDAP directory) to the global pool
 | ||||
| func AddSource(name string, host string, port int, basedn string, attributes string, filter string, msadsaformat string) { | ||||
| 	ldaphost := Ldapsource{name, host, port, basedn, attributes, filter, msadsaformat, true} | ||||
| func AddSource(name string, host string, port int, usessl bool, basedn string, attributes string, filter string, msadsaformat string) { | ||||
| 	ldaphost := Ldapsource{name, host, port, usessl, basedn, attributes, filter, msadsaformat, true} | ||||
| 	Authensource = append(Authensource, ldaphost) | ||||
| } | ||||
| 
 | ||||
|  | @ -52,7 +53,8 @@ func LoginUser(name, passwd string) (a string, r bool) { | |||
| 
 | ||||
| // searchEntry : search an LDAP source if an entry (name, passwd) is valide and in the specific filter
 | ||||
| func (ls Ldapsource) SearchEntry(name, passwd string) (string, bool) { | ||||
| 	l, err := goldap.Dial("tcp", fmt.Sprintf("%s:%d", ls.Host, ls.Port)) | ||||
| 	l, err := ldapDial(ls) | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		log.Debug("LDAP Connect error, disabled source %s", ls.Host) | ||||
| 		ls.Enabled = false | ||||
|  | @ -85,3 +87,11 @@ func (ls Ldapsource) SearchEntry(name, passwd string) (string, bool) { | |||
| 	} | ||||
| 	return "", true | ||||
| } | ||||
| 
 | ||||
| func ldapDial(ls Ldapsource) (*goldap.Conn, error) { | ||||
| 	if ls.UseSSL { | ||||
| 		return goldap.DialTLS("tcp", fmt.Sprintf("%s:%d", ls.Host, ls.Port), nil) | ||||
| 	} else { | ||||
| 		return goldap.Dial("tcp", fmt.Sprintf("%s:%d", ls.Host, ls.Port)) | ||||
| 	} | ||||
| } | ||||
|  |  | |||
|  | @ -200,11 +200,12 @@ func newLdapService() { | |||
| 			ldapname := Cfg.MustValue(v, "name", v) | ||||
| 			ldaphost := Cfg.MustValue(v, "host") | ||||
| 			ldapport := Cfg.MustInt(v, "port", 389) | ||||
| 			ldapusessl := Cfg.MustBool(v, "usessl", false) | ||||
| 			ldapbasedn := Cfg.MustValue(v, "basedn", "dc=*,dc=*") | ||||
| 			ldapattribute := Cfg.MustValue(v, "attribute", "mail") | ||||
| 			ldapfilter := Cfg.MustValue(v, "filter", "(*)") | ||||
| 			ldapmsadsaformat := Cfg.MustValue(v, "MSADSAFORMAT", "%s") | ||||
| 			ldap.AddSource(ldapname, ldaphost, ldapport, ldapbasedn, ldapattribute, ldapfilter, ldapmsadsaformat) | ||||
| 			ldap.AddSource(ldapname, ldaphost, ldapport, ldapusessl, ldapbasedn, ldapattribute, ldapfilter, ldapmsadsaformat) | ||||
| 			nbsrc++ | ||||
| 			log.Debug("%s added as LDAP source", ldapname) | ||||
| 		} | ||||
|  |  | |||
|  | @ -44,6 +44,7 @@ func NewAuthSourcePost(ctx *middleware.Context, form auth.AuthenticationForm) { | |||
| 			Ldapsource: ldap.Ldapsource{ | ||||
| 				Host:         form.Host, | ||||
| 				Port:         form.Port, | ||||
| 				UseSSL:       form.UseSSL, | ||||
| 				BaseDN:       form.BaseDN, | ||||
| 				Attributes:   form.Attributes, | ||||
| 				Filter:       form.Filter, | ||||
|  | @ -121,6 +122,7 @@ func EditAuthSourcePost(ctx *middleware.Context, form auth.AuthenticationForm) { | |||
| 			Ldapsource: ldap.Ldapsource{ | ||||
| 				Host:         form.Host, | ||||
| 				Port:         form.Port, | ||||
| 				UseSSL:       form.UseSSL, | ||||
| 				BaseDN:       form.BaseDN, | ||||
| 				Attributes:   form.Attributes, | ||||
| 				Filter:       form.Filter, | ||||
|  |  | |||
|  | @ -53,6 +53,14 @@ | |||
|                         </div> | ||||
|                     </div> | ||||
| 
 | ||||
|                     <div class="form-group {{if .Err_UseSSL}}has-error has-feedback{{end}}"> | ||||
|                          <label class="col-md-3 control-label">Use SSL: </label> | ||||
|                          <div class="col-md-7"> | ||||
|                               <input name="usessl" class="form-control" type="checkbox" {{if .Source.LDAP.UseSSL}}checked{{end}}> | ||||
|                          </div> | ||||
|                     </div> | ||||
| 
 | ||||
| 
 | ||||
|                     <div class="form-group {{if .Err_BaseDN}}has-error has-feedback{{end}}"> | ||||
|                         <label class="col-md-3 control-label">Base DN: </label> | ||||
|                         <div class="col-md-7"> | ||||
|  |  | |||
|  | @ -51,6 +51,13 @@ | |||
|                             </div> | ||||
|                         </div> | ||||
| 
 | ||||
|                         <div class="form-group {{if .Err_UseSSL}}has-error has-feedback{{end}}"> | ||||
|                              <label class="col-md-3 control-label">Use SSL: </label> | ||||
|                              <div class="col-md-7"> | ||||
|                                   <input name="usessl" class="form-control" type="checkbox" {{if .usessl}}checked{{end}}> | ||||
|                              </div> | ||||
|                         </div> | ||||
| 
 | ||||
|                         <div class="form-group {{if .Err_BaseDN}}has-error has-feedback{{end}}"> | ||||
|                             <label class="col-md-3 control-label">Base DN: </label> | ||||
|                             <div class="col-md-7"> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue