hello<br><br>i got my user "bernard" on my openldap database.<br>see my ldapserch:<br>radtest:# ldapsearch -x -b "dc=example,dc=com" uid=bernard<br># extended LDIF<br>#<br># LDAPv3<br># base <dc=example,dc=com> with scope subtree<br>
# filter: uid=bernard<br># requesting: ALL<br>#<br><br># search result<br>search: 2<br>result: 0 Success<br><br># numResponses: 1<br>#################################"<br><br>but when i tried to authenticate bernard through freeradius i'ts fail. see the debug output.<br>
<br>thank u so much guys.<br><br>radtest:# freeradius -X<br>FreeRADIUS Version 2.1.8, for host i486-pc-linux-gnu, built on Mar 10 2010 at 13:50:12<br>Copyright (C) 1999-2009 The FreeRADIUS server project and contributors.<br>
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A<br>PARTICULAR PURPOSE.<br>You may redistribute copies of FreeRADIUS under the terms of the<br>GNU General Public License v2.<br>Starting - reading configuration files ...<br>
including configuration file /etc/freeradius/radiusd.conf<br>including configuration file /etc/freeradius/proxy.conf<br>including configuration file /etc/freeradius/clients.conf<br>including configuration file /etc/freeradius/snmp.conf<br>
including configuration file /etc/freeradius/eap.conf<br>including configuration file /etc/freeradius/policy.conf<br>including files in directory /etc/freeradius/sites-enabled/<br>including configuration file /etc/freeradius/sites-enabled/default<br>
including configuration file /etc/freeradius/sites-enabled/inner-tunnel<br>main {<br>        user = "freerad"<br>        group = "freerad"<br>        allow_core_dumps = no<br>}<br>including dictionary file /etc/freeradius/dictionary<br>
main {<br>        prefix = "/usr"<br>        localstatedir = "/var"<br>        logdir = "/var/log/freeradius"<br>        libdir = "/usr/lib/freeradius"<br>        radacctdir = "/var/log/freeradius/radacct"<br>
        hostname_lookups = no<br>        max_request_time = 30<br>        cleanup_delay = 5<br>        max_requests = 1024<br>        pidfile = "/var/run/freeradius/freeradius.pid"<br>        checkrad = "/usr/sbin/checkrad"<br>
        debug_level = 0<br>        proxy_requests = yes<br> log {<br>        stripped_names = no<br>        auth = no<br>        auth_badpass = no<br>        auth_goodpass = no<br> }<br> security {<br>        max_attributes = 200<br>
        reject_delay = 1<br>        status_server = yes<br> }<br>}<br>radiusd: #### Loading Realms and Home Servers ####<br> proxy server {<br>        retry_delay = 5<br>    retry_count = 3<br>    default_fallback = no<br>
    dead_time = 120<br>    wake_all_if_all_dead = no<br> }<br> home_server localhost {<br>    ipaddr = 127.0.0.1<br>    port = 1812<br>    type = "auth"<br>    secret = "testing123"<br>    response_window = 20<br>
    max_outstanding = 65536<br>    require_message_authenticator = no<br>    zombie_period = 40<br>    status_check = "status-server"<br>    ping_interval = 30<br>    check_interval = 30<br>    num_answers_to_alive = 3<br>
    num_pings_to_alive = 3<br>    revive_interval = 120<br>    status_check_timeout = 4<br>    irt = 2<br>    mrt = 16<br>    mrc = 5<br>    mrd = 30<br> }<br> home_server_pool my_auth_failover {<br>    type = fail-over<br>
    home_server = localhost<br> }<br> realm <a href="http://example.com">example.com</a> {<br>    auth_pool = my_auth_failover<br> }<br> realm LOCAL {<br> }<br>radiusd: #### Loading Clients ####<br> client localhost {<br>
    ipaddr = 127.0.0.1<br>    require_message_authenticator = no<br>    secret = "testing123"<br>    nastype = "other"<br> }<br> client 192.168.20.253 {<br>    require_message_authenticator = no<br>    secret = "testinglinagora"<br>
    shortname = "labtest8021x"<br>    nastype = "cisco"<br> }<br>radiusd: #### Instantiating modules ####<br> instantiate {<br> Module: Linked to module rlm_exec<br> Module: Instantiating exec<br>  exec {<br>
    wait = yes<br>    input_pairs = "request"<br>    shell_escape = yes<br>  }<br> Module: Linked to module rlm_expr<br> Module: Instantiating expr<br> }<br>radiusd: #### Loading Virtual Servers ####<br>server inner-tunnel {<br>
 modules {<br> Module: Checking authenticate {...} for more modules to load<br> Module: Linked to module rlm_pap<br> Module: Instantiating pap<br>  pap {<br>    encryption_scheme = "auto"<br>    auto_header = no<br>
  }<br> Module: Linked to module rlm_chap<br> Module: Instantiating chap<br> Module: Linked to module rlm_mschap<br> Module: Instantiating mschap<br>  mschap {<br>    use_mppe = yes<br>    require_encryption = no<br>    require_strong = no<br>
    with_ntdomain_hack = no<br>  }<br> Module: Linked to module rlm_unix<br> Module: Instantiating unix<br>  unix {<br>    radwtmp = "/var/log/freeradius/radwtmp"<br>  }<br> Module: Linked to module rlm_eap<br> Module: Instantiating eap<br>
  eap {<br>    default_eap_type = "ttls"<br>    timer_expire = 60<br>    ignore_unknown_eap_types = no<br>    cisco_accounting_username_bug = no<br>    max_sessions = 4096<br>  }<br> Module: Linked to sub-module rlm_eap_tls<br>
 Module: Instantiating eap-tls<br>   tls {<br>    rsa_key_exchange = no<br>    dh_key_exchange = yes<br>    rsa_key_length = 512<br>    dh_key_length = 512<br>    verify_depth = 0<br>    pem_file_type = yes<br>    private_key_file = "/etc/freeradius/certs/server.pem"<br>
    certificate_file = "/etc/freeradius/certs/server.pem"<br>    CA_file = "/etc/freeradius/certs/ca.pem"<br>    private_key_password = "whatever"<br>    dh_file = "/etc/freeradius/certs/dh"<br>
    random_file = "/etc/freeradius/certs/random"<br>    fragment_size = 1024<br>    include_length = yes<br>    check_crl = no<br>    cipher_list = "DEFAULT"<br>    make_cert_command = "/etc/freeradius/certs/bootstrap"<br>
    cache {<br>    enable = no<br>    lifetime = 24<br>    max_entries = 255<br>    }<br>   }<br> Module: Linked to sub-module rlm_eap_ttls<br> Module: Instantiating eap-ttls<br>   ttls {<br>    default_eap_type = "md5"<br>
    copy_request_to_tunnel = yes<br>    use_tunneled_reply = yes<br>    virtual_server = "inner-tunnel"<br>    include_length = yes<br>   }<br> Module: Checking authorize {...} for more modules to load<br> Module: Linked to module rlm_realm<br>
 Module: Instantiating suffix<br>  realm suffix {<br>    format = "suffix"<br>    delimiter = "@"<br>    ignore_default = no<br>    ignore_null = no<br>  }<br> Module: Linked to module rlm_files<br> Module: Instantiating files<br>
  files {<br>    usersfile = "/etc/freeradius/users"<br>    acctusersfile = "/etc/freeradius/acct_users"<br>    preproxy_usersfile = "/etc/freeradius/preproxy_users"<br>    compat = "no"<br>
  }<br> Module: Linked to module rlm_ldap<br> Module: Instantiating ldap<br>  ldap {<br>    server = "10.75.128.251"<br>    port = 389<br>    password = "test"<br>    identity = "cn=manager,ou=admins,ou=radius,dc=example,dc=com"<br>
    net_timeout = 1<br>    timeout = 4<br>    timelimit = 3<br>    tls_mode = no<br>    start_tls = no<br>    tls_require_cert = "allow"<br>   tls {<br>    start_tls = no<br>    require_cert = "allow"<br>
   }<br>    basedn = "ou=users,ou=radius,dc=example,dc=com"<br>    filter = "(uid=%{Stripped-User-Name:-%{User-Name}})"<br>    base_filter = "(objectclass=radiusprofile)"<br>    password_attribute = "userPassword"<br>
    auto_header = no<br>    access_attr_used_for_allow = yes<br>    groupname_attribute = "radiusGroupName"<br>    groupmembership_filter = "(&(uid=%{Stripped-User-Name:-%{User-Name}})"<br>    groupmembership_attribute = "radiusGroupName"<br>
    dictionary_mapping = "/etc/freeradius/ldap.attrmap"<br>    ldap_debug = 0<br>    ldap_connections_number = 5<br>    compare_check_items = no<br>    do_xlat = yes<br>    edir_account_policy_check = yes<br>    set_auth_type = yes<br>
  }<br>rlm_ldap: Registering ldap_groupcmp for Ldap-Group<br>rlm_ldap: Registering ldap_xlat with xlat_name ldap<br>rlm_ldap: Over-riding set_auth_type, as there is no module ldap listed in the "authenticate" section.<br>
rlm_ldap: reading ldap<->radius mappings from file /etc/freeradius/ldap.attrmap<br>rlm_ldap: LDAP radiusCheckItem mapped to RADIUS $GENERIC$<br>rlm_ldap: LDAP radiusReplyItem mapped to RADIUS $GENERIC$<br>rlm_ldap: LDAP radiusAuthType mapped to RADIUS Auth-Type<br>
rlm_ldap: LDAP radiusSimultaneousUse mapped to RADIUS Simultaneous-Use<br>rlm_ldap: LDAP radiusCalledStationId mapped to RADIUS Called-Station-Id<br>rlm_ldap: LDAP radiusCallingStationId mapped to RADIUS Calling-Station-Id<br>
rlm_ldap: LDAP lmPassword mapped to RADIUS LM-Password<br>rlm_ldap: LDAP ntPassword mapped to RADIUS NT-Password<br>rlm_ldap: LDAP sambaLmPassword mapped to RADIUS LM-Password<br>rlm_ldap: LDAP sambaNtPassword mapped to RADIUS NT-Password<br>
rlm_ldap: LDAP dBCSPwd mapped to RADIUS LM-Password<br>rlm_ldap: LDAP acctFlags mapped to RADIUS SMB-Account-CTRL-TEXT<br>rlm_ldap: LDAP radiusExpiration mapped to RADIUS Expiration<br>rlm_ldap: LDAP radiusNASIpAddress mapped to RADIUS NAS-IP-Address<br>
rlm_ldap: LDAP radiusServiceType mapped to RADIUS Service-Type<br>rlm_ldap: LDAP radiusFramedProtocol mapped to RADIUS Framed-Protocol<br>rlm_ldap: LDAP radiusFramedIPAddress mapped to RADIUS Framed-IP-Address<br>rlm_ldap: LDAP radiusFramedIPNetmask mapped to RADIUS Framed-IP-Netmask<br>
rlm_ldap: LDAP radiusFramedRoute mapped to RADIUS Framed-Route<br>rlm_ldap: LDAP radiusFramedRouting mapped to RADIUS Framed-Routing<br>rlm_ldap: LDAP radiusFilterId mapped to RADIUS Filter-Id<br>rlm_ldap: LDAP radiusFramedMTU mapped to RADIUS Framed-MTU<br>
rlm_ldap: LDAP radiusFramedCompression mapped to RADIUS Framed-Compression<br>rlm_ldap: LDAP radiusLoginIPHost mapped to RADIUS Login-IP-Host<br>rlm_ldap: LDAP radiusLoginService mapped to RADIUS Login-Service<br>rlm_ldap: LDAP radiusLoginTCPPort mapped to RADIUS Login-TCP-Port<br>
rlm_ldap: LDAP radiusCallbackNumber mapped to RADIUS Callback-Number<br>rlm_ldap: LDAP radiusCallbackId mapped to RADIUS Callback-Id<br>rlm_ldap: LDAP radiusFramedIPXNetwork mapped to RADIUS Framed-IPX-Network<br>rlm_ldap: LDAP radiusClass mapped to RADIUS Class<br>
rlm_ldap: LDAP radiusSessionTimeout mapped to RADIUS Session-Timeout<br>rlm_ldap: LDAP radiusIdleTimeout mapped to RADIUS Idle-Timeout<br>rlm_ldap: LDAP radiusTerminationAction mapped to RADIUS Termination-Action<br>rlm_ldap: LDAP radiusLoginLATService mapped to RADIUS Login-LAT-Service<br>
rlm_ldap: LDAP radiusLoginLATNode mapped to RADIUS Login-LAT-Node<br>rlm_ldap: LDAP radiusLoginLATGroup mapped to RADIUS Login-LAT-Group<br>rlm_ldap: LDAP radiusFramedAppleTalkLink mapped to RADIUS Framed-AppleTalk-Link<br>
rlm_ldap: LDAP radiusFramedAppleTalkNetwork mapped to RADIUS Framed-AppleTalk-Network<br>rlm_ldap: LDAP radiusFramedAppleTalkZone mapped to RADIUS Framed-AppleTalk-Zone<br>rlm_ldap: LDAP radiusPortLimit mapped to RADIUS Port-Limit<br>
rlm_ldap: LDAP radiusLoginLATPort mapped to RADIUS Login-LAT-Port<br>rlm_ldap: LDAP radiusReplyMessage mapped to RADIUS Reply-Message<br>rlm_ldap: LDAP radiusTunnelType mapped to RADIUS Tunnel-Type<br>rlm_ldap: LDAP radiusTunnelMediumType mapped to RADIUS Tunnel-Medium-Type<br>
rlm_ldap: LDAP radiusTunnelPrivateGroupId mapped to RADIUS Tunnel-Private-Group-Id<br>conns: 0x8171ff8<br> Module: Linked to module rlm_expiration<br> Module: Instantiating expiration<br>  expiration {<br>    reply-message = "Password Has Expired  "<br>
  }<br> Module: Linked to module rlm_logintime<br> Module: Instantiating logintime<br>  logintime {<br>    reply-message = "You are calling outside your allowed timespan  "<br>    minimum-timeout = 60<br>  }<br>
 Module: Checking session {...} for more modules to load<br> Module: Linked to module rlm_radutmp<br> Module: Instantiating radutmp<br>  radutmp {<br>    filename = "/var/log/freeradius/radutmp"<br>    username = "%{User-Name}"<br>
    case_sensitive = yes<br>    check_with_nas = yes<br>    perm = 384<br>    callerid = yes<br>  }<br> Module: Checking post-proxy {...} for more modules to load<br> Module: Checking post-auth {...} for more modules to load<br>
 Module: Linked to module rlm_attr_filter<br> Module: Instantiating attr_filter.access_reject<br>  attr_filter attr_filter.access_reject {<br>    attrsfile = "/etc/freeradius/attrs.access_reject"<br>    key = "%{User-Name}"<br>
  }<br> } # modules<br>} # server<br>server {<br> modules {<br> Module: Checking authenticate {...} for more modules to load<br> Module: Checking authorize {...} for more modules to load<br> Module: Linked to module rlm_preprocess<br>
 Module: Instantiating preprocess<br>  preprocess {<br>    huntgroups = "/etc/freeradius/huntgroups"<br>    hints = "/etc/freeradius/hints"<br>    with_ascend_hack = no<br>    ascend_channels_per_line = 23<br>
    with_ntdomain_hack = no<br>    with_specialix_jetstream_hack = no<br>    with_cisco_vsa_hack = no<br>    with_alvarion_vsa_hack = no<br>  }<br> Module: Checking preacct {...} for more modules to load<br> Module: Linked to module rlm_acct_unique<br>
 Module: Instantiating acct_unique<br>  acct_unique {<br>    key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"<br>  }<br> Module: Checking accounting {...} for more modules to load<br>
 Module: Linked to module rlm_detail<br> Module: Instantiating detail<br>  detail {<br>    detailfile = "/var/log/freeradius/radacct/%{Client-IP-Address}/detail-%Y%m%d"<br>    header = "%t"<br>    detailperm = 384<br>
    dirperm = 493<br>    locking = no<br>    log_packet_header = no<br>  }<br> Module: Instantiating attr_filter.accounting_response<br>  attr_filter attr_filter.accounting_response {<br>    attrsfile = "/etc/freeradius/attrs.accounting_response"<br>
    key = "%{User-Name}"<br>  }<br> Module: Checking session {...} for more modules to load<br> Module: Checking post-proxy {...} for more modules to load<br> } # modules<br>} # server<br>radiusd: #### Opening IP addresses and Ports ####<br>
listen {<br>    type = "auth"<br>    ipaddr = *<br>    port = 0<br>}<br>listen {<br>    type = "acct"<br>    ipaddr = *<br>    port = 0<br>}<br>Listening on authentication address * port 1812<br>Listening on accounting address * port 1813<br>
Listening on proxy address * port 1814<br>Ready to process requests.<br>rad_recv: Access-Request packet from host 192.168.20.253 port 1645, id=106, length=153<br>    User-Name = "bernard"<br>    Service-Type = Framed-User<br>
    Framed-MTU = 1500<br>    Called-Station-Id = "00-1A-A1-64-BB-1A"<br>    Calling-Station-Id = "00-18-8B-B5-26-B7"<br>    EAP-Message = 0x0202000c016265726e617264<br>    Message-Authenticator = 0xcc5fc5a87a81a474f4171b85e6789f3d<br>
    Cisco-NAS-Port = "FastEthernet0/24"<br>    NAS-Port = 50024<br>    NAS-Port-Type = Ethernet<br>    NAS-IP-Address = 192.168.20.253<br>+- entering group authorize {...}<br>++[preprocess] returns ok<br>[suffix] No '@' in User-Name = "bernard", looking up realm NULL<br>
[suffix] No such realm "NULL"<br>++[suffix] returns noop<br>[eap] EAP packet type response id 2 length 12<br>[eap] No EAP Start, assuming it's an on-going EAP conversation<br>++[eap] returns updated<br>  [ldap] Entering ldap_groupcmp()<br>
[files]     expand: ou=users,ou=radius,dc=example,dc=com -> ou=users,ou=radius,dc=example,dc=com<br>[files] WARNING: Deprecated conditional expansion ":-".  See "man unlang" for details<br>[files]     ... expanding second conditional<br>
[files]     expand: %{User-Name} -> bernard<br>[files]     expand: (uid=%{Stripped-User-Name:-%{User-Name}}) -> (uid=bernard)<br>  [ldap] ldap_get_conn: Checking Id: 0<br>  [ldap] ldap_get_conn: Got Id: 0<br>  [ldap] attempting LDAP reconnection<br>
  [ldap] (re)connect to <a href="http://10.75.128.251:389">10.75.128.251:389</a>, authentication 0<br>  [ldap] bind as cn=manager,ou=admins,ou=radius,dc=example,dc=com/test to <a href="http://10.75.128.251:389">10.75.128.251:389</a><br>
  [ldap] waiting for bind result ...<br>  [ldap] Bind was successful<br>  [ldap] performing search in ou=users,ou=radius,dc=example,dc=com, with filter (uid=bernard)<br>  [ldap] object not found<br>rlm_ldap::ldap_groupcmp: search failed<br>
  [ldap] ldap_release_conn: Release Id: 0<br>++[files] returns noop<br>[ldap] performing user authorization for bernard<br>[ldap] WARNING: Deprecated conditional expansion ":-".  See "man unlang" for details<br>
[ldap]     ... expanding second conditional<br>[ldap]     expand: %{User-Name} -> bernard<br>[ldap]     expand: (uid=%{Stripped-User-Name:-%{User-Name}}) -> (uid=bernard)<br>[ldap]     expand: ou=users,ou=radius,dc=example,dc=com -> ou=users,ou=radius,dc=example,dc=com<br>
  [ldap] ldap_get_conn: Checking Id: 0<br>  [ldap] ldap_get_conn: Got Id: 0<br>  [ldap] performing search in ou=users,ou=radius,dc=example,dc=com, with filter (uid=bernard)<br>  [ldap] object not found<br>[ldap] search failed<br>
  [ldap] ldap_release_conn: Release Id: 0<br>++[ldap] returns notfound<br>[pap] WARNING! No "known good" password found for the user.  Authentication may fail because of this.<br>++[pap] returns noop<br>Found Auth-Type = EAP<br>
+- entering group authenticate {...}<br>[eap] EAP Identity<br>[eap] processing type tls<br>[tls] Initiate<br>[tls] Start returned 1<br>++[eap] returns handled<br>Sending Access-Challenge of id 106 to 192.168.20.253 port 1645<br>
    EAP-Message = 0x010300061520<br>    Message-Authenticator = 0x00000000000000000000000000000000<br>    State = 0x2b3e4ab22b3d5f3fba6933e793eadc35<br>Finished request 0.<br>Going to the next request<br>Waking up in 4.9 seconds.<br>
rad_recv: Access-Request packet from host 192.168.20.253 port 1645, id=107, length=165<br>    User-Name = "bernard"<br>    Service-Type = Framed-User<br>    Framed-MTU = 1500<br>    Called-Station-Id = "00-1A-A1-64-BB-1A"<br>
    Calling-Station-Id = "00-18-8B-B5-26-B7"<br>    EAP-Message = 0x020300060319<br>    Message-Authenticator = 0xc84586b06705544163ffe219bcfddbce<br>    Cisco-NAS-Port = "FastEthernet0/24"<br>    NAS-Port = 50024<br>
    NAS-Port-Type = Ethernet<br>    State = 0x2b3e4ab22b3d5f3fba6933e793eadc35<br>    NAS-IP-Address = 192.168.20.253<br>+- entering group authorize {...}<br>++[preprocess] returns ok<br>[suffix] No '@' in User-Name = "bernard", looking up realm NULL<br>
[suffix] No such realm "NULL"<br>++[suffix] returns noop<br>[eap] EAP packet type response id 3 length 6<br>[eap] No EAP Start, assuming it's an on-going EAP conversation<br>++[eap] returns updated<br>  [ldap] Entering ldap_groupcmp()<br>
[files]     expand: ou=users,ou=radius,dc=example,dc=com -> ou=users,ou=radius,dc=example,dc=com<br>[files] WARNING: Deprecated conditional expansion ":-".  See "man unlang" for details<br>[files]     ... expanding second conditional<br>
[files]     expand: %{User-Name} -> bernard<br>[files]     expand: (uid=%{Stripped-User-Name:-%{User-Name}}) -> (uid=bernard)<br>  [ldap] ldap_get_conn: Checking Id: 0<br>  [ldap] ldap_get_conn: Got Id: 0<br>  <b>[ldap] performing search in ou=users,ou=radius,dc=example,dc=com, with filter (uid=bernard)<br>
  [ldap] object not found<br>rlm_ldap::ldap_groupcmp: search failed</b><br>  [ldap] ldap_release_conn: Release Id: 0<br>++[files] returns noop<br>[ldap] performing user authorization for bernard<br>[ldap] WARNING: Deprecated conditional expansion ":-".  See "man unlang" for details<br>
[ldap]     ... expanding second conditional<br>[ldap]     expand: %{User-Name} -> bernard<br>[ldap]     expand: (uid=%{Stripped-User-Name:-%{User-Name}}) -> (uid=bernard)<br>[ldap]     expand: ou=users,ou=radius,dc=example,dc=com -> ou=users,ou=radius,dc=example,dc=com<br>
  [ldap] ldap_get_conn: Checking Id: 0<br>  [ldap] ldap_get_conn: Got Id: 0<br>  [ldap] performing search in ou=users,ou=radius,dc=example,dc=com, with filter (uid=bernard)<br>  [ldap] object not found<br>[ldap] search failed<br>
  [ldap] ldap_release_conn: Release Id: 0<br>++[ldap] returns notfound<br>[pap] WARNING! No "known good" password found for the user.  Authentication may fail because of this.<br>++[pap] returns noop<br>Found Auth-Type = EAP<br>
+- entering group authenticate {...}<br>[eap] Request found, released from the list<br>[eap] EAP NAK<br>[eap] NAK asked for unsupported type PEAP<br>[eap] No common EAP types found.<br>[eap] Failed in EAP select<br>++[eap] returns invalid<br>
Failed to authenticate the user.<br>Using Post-Auth-Type Reject<br>  WARNING: Unknown value specified for Post-Auth-Type.  Cannot perform requested action.<br>Delaying reject of request 1 for 1 seconds<br>Going to the next request<br>
Waking up in 0.9 seconds.<br>Sending delayed reject for request 1<br>Sending Access-Reject of id 107 to 192.168.20.253 port 1645<br>    EAP-Message = 0x04030004<br>    Message-Authenticator = 0x00000000000000000000000000000000<br>
Waking up in 3.9 seconds.<br>Cleaning up request 0 ID 106 with timestamp +19<br>Waking up in 1.0 seconds.<br>Cleaning up request 1 ID 107 with timestamp +19<br>Ready to process requests.<br><br><b>thanks for helping me</b><br>
<br><br>