root / pykota / trunk / initscripts / ldap / pykota.schema @ 3549

Revision 3549, 12.9 kB (checked in by jerome, 14 years ago)

Removed support for the MaxJobSize? attribute for users group print quota
entries : I couldn't see a real use for this at the moment, and it would
complexify the code. This support might reappear later however. Added full
support for the MaxJobSize? attribute for user print quota entries,
editable with edpykota's new --maxjobsize command line switch. Changed
the internal handling of the MaxJobSize? attribute for printers :
internally 0 used to mean unlimited, it now allows one to forbid
printing onto a particular printer. The database upgrade script (only
for PostgreSQL) takes care of this.
IMPORTANT : the database schema changes. A database upgrade script is
provided for PostgreSQL only. The LDAP schema doesn't change to not
break any existing LDAP directory, so the pykotaMaxJobSize attribute is
still allowed on group print quota entries, but never used.
Seems to work as expected, for a change :-)
Fixes #15.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
RevLine 
[1015]1# $Id$
2#
3# pykota.schema
4#
5# LDAP Schema for Pykota Quota System
6#
[3549]7# (c) 2003-2010 Jerome Alet <alet@librelogiciel.com>
[3259]8# This program is free software: you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation, either version 3 of the License, or
11# (at your option) any later version.
[3413]12#
[3259]13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16# GNU General Public License for more details.
[3413]17#
[3259]18# You should have received a copy of the GNU General Public License
19# along with this program.  If not, see <http://www.gnu.org/licenses/>.
20#
[1098]21# Include it in OpenLDAP's configuration file (/etc/ldap/slapd.conf)
22# and restart slapd.
23#
[1015]24# Written 2003-05-28 by Wayne Godoy and John Flynn <wgodoy =AT= ub -DOT- edu -DOT- bz>
25#
26# Modified by Jerome Alet 2003-06-01
27#
28# 16868.x       => Conseil Internet & Logiciels Libres
29# 16868.1.x     => Pykota
30# 16868.1.1.x   => attributes
31# 16868.1.2.x   => classes
32#
[3413]33# Contributors : Leif Johansson - Stockholm University
[1017]34#
[1015]35
[3413]36#
[1017]37# PyKota Attributes Types
38#
[1015]39
[1017]40# pykotaLimitBy
[1015]41attributetype ( 1.3.6.1.4.1.16868.1.1.1 NAME 'pykotaLimitBy'
42        DESC 'How to limit the user/group : quota or balance'
43        EQUALITY caseIgnoreIA5Match
44        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
45
[1017]46# pykotaBalance
[1015]47attributetype ( 1.3.6.1.4.1.16868.1.1.2 NAME 'pykotaBalance'
48        DESC 'Current account balance for the user, float'
49        EQUALITY caseIgnoreIA5Match
50        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
51
[1017]52# pykotaLifeTimePaid
[1015]53attributetype ( 1.3.6.1.4.1.16868.1.1.3 NAME 'pykotaLifeTimePaid'
54        DESC 'Total money paid by the user to fill his account balance, float'
55        EQUALITY caseIgnoreIA5Match
56        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
57
[1017]58# pykotaPricePerPage
[1015]59attributetype ( 1.3.6.1.4.1.16868.1.1.4 NAME 'pykotaPricePerPage'
60        DESC 'Price per page for a printer, float'
61        EQUALITY caseIgnoreIA5Match
62        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
63
[1017]64# pykotaPricePerJob
[1015]65attributetype ( 1.3.6.1.4.1.16868.1.1.5 NAME 'pykotaPricePerJob'
66        DESC 'Price per job for a printer, float'
67        EQUALITY caseIgnoreIA5Match
68        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
69
[1017]70# pykotaSoftLimit
71attributetype ( 1.3.6.1.4.1.16868.1.1.6 NAME 'pykotaSoftLimit'
[1015]72        DESC 'Soft limit in maximal number of pages'
[1041]73        EQUALITY caseIgnoreIA5Match
74        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
[3413]75
76# pykotaHardLimit
[1017]77attributetype ( 1.3.6.1.4.1.16868.1.1.7 NAME 'pykotaHardLimit'
[1015]78        DESC 'Hard limit in maximal number of pages'
[1041]79        EQUALITY caseIgnoreIA5Match
80        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
[1015]81
[1017]82# pykotaDateLimit
83attributetype ( 1.3.6.1.4.1.16868.1.1.8 NAME 'pykotaDateLimit'
[1015]84        DESC 'Date at which the soft limit becomes a hard one'
85        EQUALITY caseIgnoreIA5Match
86        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
87
[1017]88# pykotaPageCounter
89attributetype ( 1.3.6.1.4.1.16868.1.1.9 NAME 'pykotaPageCounter'
[1015]90        DESC 'Current page counter for the user on a particular printer'
91        EQUALITY integerMatch
92        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
93
[1017]94# pykotaLifePageCounter
95attributetype ( 1.3.6.1.4.1.16868.1.1.10 NAME 'pykotaLifePageCounter'
[1015]96        DESC 'Total page counter for the user on a particular printer'
97        EQUALITY integerMatch
98        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
99
[1017]100# pykotaJobId
101attributetype ( 1.3.6.1.4.1.16868.1.1.11 NAME 'pykotaJobId'
[1015]102        DESC 'Id of a job in a printer history of jobs'
[1017]103        EQUALITY caseExactIA5Match
104        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
[1015]105
[1017]106# pykotaPrinterPageCounter
107attributetype ( 1.3.6.1.4.1.16868.1.1.12 NAME 'pykotaPrinterPageCounter'
[1015]108        DESC 'Life time page counter of a printer when the job began'
109        EQUALITY integerMatch
110        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
111
[1017]112# pykotaJobSize
113attributetype ( 1.3.6.1.4.1.16868.1.1.13 NAME 'pykotaJobSize'
[1015]114        DESC 'Current job size in number of pages in the history'
[1200]115        EQUALITY integerMatch
116        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
[1015]117
[1017]118# pykotaAction
119attributetype ( 1.3.6.1.4.1.16868.1.1.14 NAME 'pykotaAction'
[2631]120        DESC 'Was the job allowed, denied, warned, cancelled or failed : ( "ALLOW" |  "DENY" | "WARN" | "CANCEL" | "PROBLEM" )'
[1018]121        EQUALITY caseExactIA5Match
[1015]122        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
[3413]123
124# pykotaPrinterName
[1017]125attributetype ( 1.3.6.1.4.1.16868.1.1.15 NAME 'pykotaPrinterName'
126        DESC 'PyKota printer name as received from the printing subsystem'
[1200]127        EQUALITY caseExactIA5Match
128        SUBSTR caseExactIA5SubstringsMatch
[1015]129        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
[3413]130
131# pykotaUserName
[1017]132attributetype ( 1.3.6.1.4.1.16868.1.1.16 NAME 'pykotaUserName'
133        DESC 'PyKota user name'
134        EQUALITY caseExactIA5Match
[1200]135        SUBSTR caseExactIA5SubstringsMatch
[1017]136        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
[3413]137
138# pykotaGroupName
[1017]139attributetype ( 1.3.6.1.4.1.16868.1.1.17 NAME 'pykotaGroupName'
140        DESC 'PyKota group name'
141        EQUALITY caseExactIA5Match
[1200]142        SUBSTR caseExactIA5SubstringsMatch
[1017]143        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
[3413]144
145# pykotaLastJobIdent
[1018]146attributetype ( 1.3.6.1.4.1.16868.1.1.18 NAME 'pykotaLastJobIdent'
147        DESC 'Identifies the last job in the history'
[1017]148        EQUALITY caseExactIA5Match
149        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
[3413]150
151# pykotaFileName
[1200]152attributetype ( 1.3.6.1.4.1.16868.1.1.19 NAME 'pykotaFileName'
153        DESC 'Print job filename'
[1455]154        EQUALITY caseExactMatch
155        SUBSTR caseExactSubstringsMatch
156        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
[3413]157
158# pykotaTitle
[1200]159attributetype ( 1.3.6.1.4.1.16868.1.1.20 NAME 'pykotaTitle'
160        DESC 'Print job title'
[1455]161        EQUALITY caseIgnoreMatch
162        SUBSTR caseIgnoreSubstringsMatch
163        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
[3413]164
[1200]165# pykotaCopies
166attributetype ( 1.3.6.1.4.1.16868.1.1.21 NAME 'pykotaCopies'
167        DESC 'Number of copies of the current print job'
168        EQUALITY integerMatch
169        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
[3413]170
171# pykotaOptions
[1200]172attributetype ( 1.3.6.1.4.1.16868.1.1.22 NAME 'pykotaOptions'
173        DESC 'Print job options'
[1480]174        EQUALITY caseIgnoreMatch
175        SUBSTR caseIgnoreSubstringsMatch
176        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
[3413]177
[1203]178# pykotaJobPrice
179attributetype ( 1.3.6.1.4.1.16868.1.1.23 NAME 'pykotaJobPrice'
180        DESC 'Price of a particular job in the history, float'
181        EQUALITY caseIgnoreIA5Match
182        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
183
[1473]184# pykotaHostName
185attributetype ( 1.3.6.1.4.1.16868.1.1.24 NAME 'pykotaHostName'
186        DESC 'The host the job is coming from'
187        EQUALITY caseIgnoreMatch
188        SUBSTR caseIgnoreSubstringsMatch
189        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256} )
[3413]190
[1520]191# pykotaJobSizeBytes
192attributetype ( 1.3.6.1.4.1.16868.1.1.25 NAME 'pykotaJobSizeBytes'
193        DESC 'Current job size in number of bytes in the history'
194        EQUALITY integerMatch
195        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
[1473]196
[1520]197# pykotaPayments
198attributetype ( 1.3.6.1.4.1.16868.1.1.26 NAME 'pykotaPayments'
[1522]199        DESC 'Stores all payments made by an user, encoded to store both date and amount, separated by a # between two spaces'
[1520]200        EQUALITY caseExactIA5Match
201        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
[3413]202
[2054]203# pykotaOverCharge
204attributetype ( 1.3.6.1.4.1.16868.1.1.27 NAME 'pykotaOverCharge'
205        DESC 'OverCharging factor for a particular user, float'
[1996]206        EQUALITY caseIgnoreIA5Match
207        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
[3413]208
[1996]209# pykotaWarnCount
210attributetype ( 1.3.6.1.4.1.16868.1.1.28 NAME 'pykotaWarnCount'
[2571]211        DESC 'Number of times the user was warned because a banner was denied'
[1996]212        EQUALITY integerMatch
213        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
[3413]214
215# pykotaMD5Sum
[1996]216attributetype ( 1.3.6.1.4.1.16868.1.1.29 NAME 'pykotaMD5Sum'
[1997]217        DESC 'MD5 Sum of the job datas'
[1996]218        EQUALITY caseExactIA5Match
219        SUBSTR caseExactIA5SubstringsMatch
220        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
[3413]221
222# pykotaPages
[1996]223attributetype ( 1.3.6.1.4.1.16868.1.1.30 NAME 'pykotaPages'
[1997]224        DESC 'Descriptor for each page settings in the history'
[1996]225        EQUALITY caseExactIA5Match
226        SUBSTR caseExactIA5SubstringsMatch
227        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)
[3413]228
[1996]229# pykotaPrinterCoefficient
230attributetype ( 1.3.6.1.4.1.16868.1.1.31 NAME 'pykotaPrinterCoefficient'
231        DESC 'Coefficient for a particular page format. Contains label # coeff, e.g. A3 # 2.0'
232        EQUALITY caseIgnoreIA5Match
233        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
[1520]234
[2024]235# pykotaBillingCode
236attributetype ( 1.3.6.1.4.1.16868.1.1.32 NAME 'pykotaBillingCode'
237        DESC 'Optional billing code for the print job'
238        EQUALITY caseIgnoreMatch
239        SUBSTR caseIgnoreSubstringsMatch
240        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
[3413]241
[2317]242# pykotaPrecomputedJobSize
243attributetype ( 1.3.6.1.4.1.16868.1.1.33 NAME 'pykotaPrecomputedJobSize'
244        DESC 'Precomputed job size in number of pages in the history'
245        EQUALITY integerMatch
246        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
[1996]247
[2317]248# pykotaPrecomputedJobPrice
249attributetype ( 1.3.6.1.4.1.16868.1.1.34 NAME 'pykotaPrecomputedJobPrice'
250        DESC 'Precomputed Price of a particular job in the history, float'
251        EQUALITY caseIgnoreIA5Match
252        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
[3413]253
[2317]254# pykotaMaxJobSize
255attributetype ( 1.3.6.1.4.1.16868.1.1.35 NAME 'pykotaMaxJobSize'
256        DESC 'Maximum size allowed for a job'
257        EQUALITY integerMatch
258        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
259
260# pykotaPassThrough
[2452]261attributetype ( 1.3.6.1.4.1.16868.1.1.36 NAME 'pykotaPassThrough'
[2317]262        DESC 'Indicates if the printer is in pass through mode'
[2458]263        EQUALITY caseIgnoreIA5Match
264        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
[2317]265
[3413]266#
[1017]267# PyKota Object Classes
268#
[1015]269
[1223]270# pykotaAccount
[1017]271objectclass ( 1.3.6.1.4.1.16868.1.2.1 NAME 'pykotaAccount' SUP top AUXILIARY
[1015]272        DESC 'PyKota Auxiliary User Account'
[1018]273        MUST ( uid )
[2317]274        MAY  ( pykotaUserName $ pykotaLimitBy $ mail $ description ) )
[3413]275
276# pykotaGroup
[1015]277objectclass ( 1.3.6.1.4.1.16868.1.2.2 NAME 'pykotaGroup' SUP top AUXILIARY
278        DESC 'PyKota Auxiliary Group'
[1018]279        MUST ( cn )
[2317]280        MAY  ( pykotaGroupName $ pykotaLimitBy $ memberUid $ uniqueMember $ member $ description ) )
[3413]281
282# pykotaPrinter
[1017]283objectclass ( 1.3.6.1.4.1.16868.1.2.3 NAME 'pykotaPrinter' SUP top AUXILIARY
[1015]284        DESC 'PyKota Printer'
[1018]285        MUST ( cn )
[2317]286        MAY  ( pykotaMaxJobSize $ pykotaPassThrough $ description $ pykotaPrinterName $ pykotaPricePerPage $ pykotaPricePerJob $ pykotaPrinterCoefficient $ uniqueMember ) )
[3413]287
288# pykotaUserPQuota
[1017]289objectclass ( 1.3.6.1.4.1.16868.1.2.4 NAME 'pykotaUserPQuota' SUP top AUXILIARY
[1015]290        DESC 'PyKota User Quota on a Printer'
[1017]291        MUST ( cn $ pykotaUserName $ pykotaPrinterName )
[2452]292        MAY  ( pykotaMaxJobSize $ pykotaPageCounter $ pykotaLifePageCounter $ pykotaSoftLimit $ pykotaHardLimit $ pykotaDateLimit $ pykotaWarnCount ) )
[3413]293
294# pykotaGroupPQuota
[3549]295# NB : we still allow pykotaMaxJobSize here but
296# only to not break existing LDAP directories.
297# This attribute is not supported for users groups.
[1017]298objectclass ( 1.3.6.1.4.1.16868.1.2.5 NAME 'pykotaGroupPQuota' SUP top AUXILIARY
[1015]299        DESC 'PyKota Group Quota on a Printer'
[1017]300        MUST ( cn $ pykotaGroupName $ pykotaPrinterName )
[2317]301        MAY  ( pykotaMaxJobSize $ pykotaSoftLimit $ pykotaHardLimit $ pykotaDateLimit ) )
[3413]302
303# pykotaJob
[1017]304objectclass ( 1.3.6.1.4.1.16868.1.2.6 NAME 'pykotaJob' SUP top AUXILIARY
[1015]305        DESC 'An entry in the job history for a printer'
[1017]306        MUST ( cn $ pykotaUserName $ pykotaPrinterName $ pykotaJobId )
[2317]307        MAY  ( pykotaPrecomputedJobPrice $ pykotaPrecomputedJobSize $ pykotaBillingCode $ pykotaPrinterPageCounter $ pykotaJobSize $ pykotaAction $ pykotaJobPrice $ pykotaFileName $ pykotaTitle $ pykotaCopies $ pykotaOptions $ pykotaHostName $ pykotaJobSizeBytes $ pykotaMD5Sum $ pykotaPages ) )
[3413]308
[1017]309# pykotaAccountBalance
310objectclass ( 1.3.6.1.4.1.16868.1.2.7 NAME 'pykotaAccountBalance' SUP top AUXILIARY
311        DESC 'PyKota User account balance'
[2054]312        MAY  ( pykotaUserName $ pykotaBalance $ pykotaLifeTimePaid $ pykotaOverCharge $ pykotaPayments ) )
[3413]313
314# pykotaLastJob
[1017]315objectclass ( 1.3.6.1.4.1.16868.1.2.8 NAME 'pykotaLastJob' SUP top AUXILIARY
316        DESC 'Last job information for a printer'
[1018]317        MUST ( pykotaLastJobIdent )
[3413]318        MAY ( pykotaPrinterName ) )
319
[2317]320# pykotaBilling
321objectclass ( 1.3.6.1.4.1.16868.1.2.10 NAME 'pykotaBilling' SUP top AUXILIARY
322        DESC 'Allowed billing codes'
323        MUST ( cn $ pykotaBillingCode )
[2318]324        MAY ( pykotaPageCounter $ pykotaBalance $ description ) )
[3413]325
326# pykotaObject - Use it if you have to
[1018]327objectclass ( 1.3.6.1.4.1.16868.1.2.9 NAME 'pykotaObject' SUP top STRUCTURAL
328        DESC 'PyKota Object'
[1017]329        MUST ( cn ) )
[3413]330
Note: See TracBrowser for help on using the browser.