You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: ldap.go
    path of file: ./repos/mindoc/utils
    
    the code of the file until where you have to start completion: package utils

import (
	"errors"
	"fmt"

	"github.com/beego/beego/v2/core/logs"
	"github.com/go-ldap/ldap/v3"
)

/*
对应的config
ldap:
  host: hostname.yourdomain.com //ldap服务器地址
  port: 3268 //ldap服务器端口
  attribute: mail //用户名对应ldap object属性
  base: DC=yourdomain,DC=com //搜寻范围
  user: CN=ldap helper,OU=yourdomain.com,DC=yourdomain,DC=com //第一次绑定用户
  password: p@sswd //第一次绑定密码
  ssl: false //使用使用ssl
*/

func ValidLDAPLogin(password string) (result bool, err error) {
	result = false
	err = nil
	lc, err := ldap
    
func ModifyPassword(account, old_password, new_password string) error {
	l, err := ldap.DialURL(fmt.Sprintf("ldap://%s:%d", "192.168.3.104", 389))
	if err != nil {
		logs.Error("DialURL => ", err)
	}
	defer l.Close()

	user := fmt.Sprintf("cn=%s,dc=minho,dc=com", account)
	err = l.Bind(user, old_password)
	if err != nil {
		logs.Error("Bind => ", err)
		return err
	}

	passwordModifyRequest := ldap.NewPasswordModifyRequest(user, old_password, new_password)
	_, err = l.PasswordModify(passwordModifyRequest)

	if err != nil {
		logs.Error(fmt.Sprintf("Password could not be changed: %s", err.Error()))
		return err
	}
	return nil
}