/*
 * English resources for WLDAP32
 *
 * Copyright 2005 Hans Leidekker
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#include "windef.h"

#pragma makedep po

LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT

/* The error constants are defined in an enum and thus cannot be used here. */

STRINGTABLE
{
    0 "Success"
    1 "Operations Error"
    2 "Protocol Error"
    3 "Time Limit Exceeded"
    4 "Size Limit Exceeded"
    5 "Compare False"
    6 "Compare True"
    7 "Authentication Method Not Supported"
    8 "Strong Authentication Required"
    9 "Referral (v2)"
    10 "Referral"
    11 "Administration Limit Exceeded"
    12 "Unavailable Critical Extension"
    13 "Confidentiality Required"
    14 "SASL Bind in Progress"
    15 ""
    16 "No Such Attribute"
    17 "Undefined Type"
    18 "Inappropriate Matching"
    19 "Constraint Violation"
    20 "Attribute Or Value Exists"
    21 "Invalid Syntax"
    22 ""
    23 ""
    24 ""
    25 ""
    26 ""
    27 ""
    28 ""
    29 ""
    30 ""
    31 ""
    32 "No Such Object"
    33 "Alias Problem"
    34 "Invalid DN Syntax"
    35 "Is Leaf"
    36 "Alias Dereference Problem"
    37 ""
    38 ""
    39 ""
    40 ""
    41 ""
    42 ""
    43 ""
    44 ""
    45 ""
    46 ""
    47 ""
    48 "Inappropriate Authentication"
    49 "Invalid Credentials"
    50 "Insufficient Rights"
    51 "Busy"
    52 "Unavailable"
    53 "Unwilling To Perform"
    54 "Loop Detected"
    55 ""
    56 ""
    57 ""
    58 ""
    59 ""
    60 "Sort Control Missing"
    61 "Index range error"
    62 ""
    63 ""
    64 "Naming Violation"
    65 "Object Class Violation"
    66 "Not allowed on Non-leaf"
    67 "Not allowed on RDN"
    68 "Already Exists"
    69 "No Object Class Mods"
    70 "Results Too Large"
    71 "Affects Multiple DSAs"
    72 ""
    73 ""
    74 ""
    75 ""
    76 ""
    77 ""
    78 ""
    79 ""
    80 "Other"
    81 "Server Down"
    82 "Local Error"
    83 "Encoding Error"
    84 "Decoding Error"
    85 "Timeout"
    86 "Auth Unknown"
    87 "Filter Error"
    88 "User Canceled"
    89 "Parameter Error"
    90 "No Memory"
    91 "Can't connect to the LDAP server"
    92 "Operation not supported by this version of the LDAP protocol"
    93 "Specified control was not found in message"
    94 "No result present in message"
    95 "More results returned"
    96 "Loop while handling referrals"
    97 "Referral hop limit exceeded"
}
