Changeset 2317
- Timestamp:
- 06/15/05 22:46:47 (19 years ago)
- Location:
- pykota/trunk
- Files:
-
- 1 added
- 5 modified
Legend:
- Unmodified
- Added
- Removed
-
pykota/trunk/initscripts/ldap/pykota.schema
r2146 r2317 226 226 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE ) 227 227 228 # pykotaPrecomputedJobSize 229 attributetype ( 1.3.6.1.4.1.16868.1.1.33 NAME 'pykotaPrecomputedJobSize' 230 DESC 'Precomputed job size in number of pages in the history' 231 EQUALITY integerMatch 232 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) 233 234 # pykotaPrecomputedJobPrice 235 attributetype ( 1.3.6.1.4.1.16868.1.1.34 NAME 'pykotaPrecomputedJobPrice' 236 DESC 'Precomputed Price of a particular job in the history, float' 237 EQUALITY caseIgnoreIA5Match 238 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE ) 239 240 # pykotaMaxJobSize 241 attributetype ( 1.3.6.1.4.1.16868.1.1.35 NAME 'pykotaMaxJobSize' 242 DESC 'Maximum size allowed for a job' 243 EQUALITY integerMatch 244 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) 245 246 # pykotaTemporaryDenied 247 attributetype ( 1.3.6.1.4.1.16868.1.1.36 NAME 'pykotaTemporaryDenied' 248 DESC 'Indicates if the user is temporarily denied to print' 249 SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) 250 251 # pykotaPassThrough 252 attributetype ( 1.3.6.1.4.1.16868.1.1.37 NAME 'pykotaPassThrough' 253 DESC 'Indicates if the printer is in pass through mode' 254 SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 SINGLE-VALUE ) 228 255 229 256 # … … 235 262 DESC 'PyKota Auxiliary User Account' 236 263 MUST ( uid ) 237 MAY ( pykotaUserName $ pykotaLimitBy $ mail ) )264 MAY ( pykotaUserName $ pykotaLimitBy $ mail $ description ) ) 238 265 239 266 # pykotaGroup … … 241 268 DESC 'PyKota Auxiliary Group' 242 269 MUST ( cn ) 243 MAY ( pykotaGroupName $ pykotaLimitBy $ memberUid $ uniqueMember $ member ) )270 MAY ( pykotaGroupName $ pykotaLimitBy $ memberUid $ uniqueMember $ member $ description ) ) 244 271 245 272 # pykotaPrinter … … 247 274 DESC 'PyKota Printer' 248 275 MUST ( cn ) 249 MAY ( description $ pykotaPrinterName $ pykotaPricePerPage $ pykotaPricePerJob $ pykotaPrinterCoefficient $ uniqueMember ) )276 MAY ( pykotaMaxJobSize $ pykotaPassThrough $ description $ pykotaPrinterName $ pykotaPricePerPage $ pykotaPricePerJob $ pykotaPrinterCoefficient $ uniqueMember ) ) 250 277 251 278 # pykotaUserPQuota … … 253 280 DESC 'PyKota User Quota on a Printer' 254 281 MUST ( cn $ pykotaUserName $ pykotaPrinterName ) 255 MAY ( pykota PageCounter $ pykotaLifePageCounter $ pykotaSoftLimit $ pykotaHardLimit $ pykotaDateLimit $ pykotaWarnCount ) )282 MAY ( pykotaMaxJobSize $ pykotaTemporaryDenied $ pykotaPageCounter $ pykotaLifePageCounter $ pykotaSoftLimit $ pykotaHardLimit $ pykotaDateLimit $ pykotaWarnCount ) ) 256 283 257 284 # pykotaGroupPQuota … … 259 286 DESC 'PyKota Group Quota on a Printer' 260 287 MUST ( cn $ pykotaGroupName $ pykotaPrinterName ) 261 MAY ( pykota SoftLimit $ pykotaHardLimit $ pykotaDateLimit ) )288 MAY ( pykotaMaxJobSize $ pykotaSoftLimit $ pykotaHardLimit $ pykotaDateLimit ) ) 262 289 263 290 # pykotaJob … … 265 292 DESC 'An entry in the job history for a printer' 266 293 MUST ( cn $ pykotaUserName $ pykotaPrinterName $ pykotaJobId ) 267 MAY ( pykota BillingCode $ pykotaPrinterPageCounter $ pykotaJobSize $ pykotaAction $ pykotaJobPrice $ pykotaFileName $ pykotaTitle $ pykotaCopies $ pykotaOptions $ pykotaHostName $ pykotaJobSizeBytes $ pykotaMD5Sum $ pykotaPages ) )294 MAY ( pykotaPrecomputedJobPrice $ pykotaPrecomputedJobSize $ pykotaBillingCode $ pykotaPrinterPageCounter $ pykotaJobSize $ pykotaAction $ pykotaJobPrice $ pykotaFileName $ pykotaTitle $ pykotaCopies $ pykotaOptions $ pykotaHostName $ pykotaJobSizeBytes $ pykotaMD5Sum $ pykotaPages ) ) 268 295 269 296 # pykotaAccountBalance … … 278 305 MAY ( pykotaPrinterName ) ) 279 306 307 # pykotaBilling 308 objectclass ( 1.3.6.1.4.1.16868.1.2.10 NAME 'pykotaBilling' SUP top AUXILIARY 309 DESC 'Allowed billing codes' 310 MUST ( cn $ pykotaBillingCode ) 311 MAY ( pykotaPageCounter $ pykotaBalance ) ) 312 280 313 # pykotaObject - Use it if you have to 281 314 objectclass ( 1.3.6.1.4.1.16868.1.2.9 NAME 'pykotaObject' SUP top STRUCTURAL -
pykota/trunk/initscripts/postgresql/pykota-postgresql.sql
r2303 r2317 53 53 lifetimepaid FLOAT DEFAULT 0.0, 54 54 limitby TEXT DEFAULT 'quota', 55 description TEXT, 55 56 overcharge FLOAT NOT NULL DEFAULT 1.0); 56 57 … … 60 61 CREATE TABLE groups(id SERIAL PRIMARY KEY NOT NULL, 61 62 groupname TEXT UNIQUE NOT NULL, 63 description TEXT, 62 64 limitby TEXT DEFAULT 'quota'); 63 65 … … 69 71 description TEXT, 70 72 priceperpage FLOAT DEFAULT 0.0, 71 priceperjob FLOAT DEFAULT 0.0); 73 priceperjob FLOAT DEFAULT 0.0, 74 passthrough BOOLEAN DEFAULT 'f', 75 maxjobsize INT4); 72 76 73 77 -- … … 82 86 hardlimit INT4, 83 87 datelimit TIMESTAMP, 88 maxjobsize INT4, 89 temporarydenied BOOLEAN DEFAULT 'f', 84 90 warncount INT4 DEFAULT 0); 85 91 CREATE INDEX userpquota_u_id_ix ON userpquota (userid); … … 107 113 pages TEXT, 108 114 billingcode TEXT, 115 precomputedjobsize INT4, 116 precomputedjobprice FLOAT, 109 117 jobdate TIMESTAMP DEFAULT now(), 110 118 CONSTRAINT checkUserPQuota FOREIGN KEY (userid, printerid) REFERENCES userpquota(userid, printerid)); … … 122 130 softlimit INT4, 123 131 hardlimit INT4, 132 maxjobsize INT4, 124 133 datelimit TIMESTAMP); 125 134 CREATE INDEX grouppquota_g_id_ix ON grouppquota (groupid); … … 158 167 CONSTRAINT coeffconstraint UNIQUE (printerid, label)); 159 168 169 -- 170 -- Create the table for the billing codes 171 -- 172 CREATE TABLE billingcodes (id SERIAL PRIMARY KEY NOT NULL, 173 label TEXT UNIQUE NOT NULL, 174 balance FLOAT DEFAULT 0.0, 175 pagecounter INT4 DEFAULT 0); 176 160 177 -- 161 178 -- Set some ACLs 162 179 -- 163 REVOKE ALL ON users, groups, printers, userpquota, grouppquota, groupsmembers, printergroupsmembers, jobhistory, payments, coefficients FROM public;164 REVOKE ALL ON users_id_seq, groups_id_seq, printers_id_seq, userpquota_id_seq, grouppquota_id_seq, jobhistory_id_seq, payments_id_seq, coefficients_id_seq FROM public;180 REVOKE ALL ON users, groups, printers, userpquota, grouppquota, groupsmembers, printergroupsmembers, jobhistory, payments, coefficients, billingcodes FROM public; 181 REVOKE ALL ON users_id_seq, groups_id_seq, printers_id_seq, userpquota_id_seq, grouppquota_id_seq, jobhistory_id_seq, payments_id_seq, coefficients_id_seq, billingcodes_id_seq FROM public; 165 182 166 GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON users, groups, printers, userpquota, grouppquota, groupsmembers, printergroupsmembers, jobhistory, payments, coefficients TO pykotaadmin;167 GRANT SELECT, UPDATE ON users_id_seq, groups_id_seq, printers_id_seq, userpquota_id_seq, grouppquota_id_seq, jobhistory_id_seq, payments_id_seq, coefficients_id_seq TO pykotaadmin;168 GRANT SELECT ON users, groups, printers, userpquota, grouppquota, groupsmembers, printergroupsmembers, jobhistory, payments, coefficients TO pykotauser;183 GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON users, groups, printers, userpquota, grouppquota, groupsmembers, printergroupsmembers, jobhistory, payments, coefficients, billingcodes TO pykotaadmin; 184 GRANT SELECT, UPDATE ON users_id_seq, groups_id_seq, printers_id_seq, userpquota_id_seq, grouppquota_id_seq, jobhistory_id_seq, payments_id_seq, coefficients_id_seq, billingcodes_id_seq TO pykotaadmin; 185 GRANT SELECT ON users, groups, printers, userpquota, grouppquota, groupsmembers, printergroupsmembers, jobhistory, payments, coefficients, billingcodes TO pykotauser; 169 186 -
pykota/trunk/NEWS
r2316 r2317 22 22 PyKota NEWS : 23 23 24 - 1.23alpha12 : 25 26 - Big database changes, use the migration scripts ! 27 24 28 - 1.23alpha11 : 25 29 -
pykota/trunk/pykota/version.py
r2316 r2317 22 22 # 23 23 24 __version__ = "1.23alpha1 1_unofficial"24 __version__ = "1.23alpha12_unofficial" 25 25 26 26 __doc__ = "PyKota : a complete Printing Quota Solution for CUPS and LPRng." -
pykota/trunk/TODO
r2315 r2317 48 48 these values, and PyKota processes the job as usual. 49 49 50 - Add a table listing all the allowed billing codes. Unknown51 billing codes should produce an action which is configurable52 (reject the job being the default). The billing codes table53 will contains total pages and cost, and life time pages54 and cost => speedup for LDAP, and allows people to cleanup55 the printing history in any case. A tool to manage the56 table of billing codes must be written, but this will57 be easy.58 59 - Pass-through mode for printers : history correctly filled (including60 job size) but no impact on user's page counter or account61 balance : this is meant to be a temporary situation for62 a printer to be in pass-through mode, for example during63 an exam where the faculty pays for the printouts and we64 don't want our users to complain about their credits being65 "eaten" for mandatory printouts.66 67 50 - Allow several levels of administrative priviledges by allowing 68 51 files like ~pykota/pykotadmin.someusername.conf (readonly by … … 71 54 in PyKota's database ! 72 55 73 - Add a "printing denied" indicator on user print quota entries,74 to temporarily forbid an user to print on a particular printer.75 76 - Maybe per user "denyduplicates" : my 5 years old daughter77 just prints again when the printer is off...78 Maybe not needed anymore since denyduplicates now allows79 an external command to decide if the job should be allowed80 or denied.81 82 - Now that the job size is ALWAYS precomputed, add a83 MaxJobSize attribute to users and groups (printers as84 well, maybe ?) to limit each job's size if needed.85 86 - Add precomputed job size (and price) to the history for87 controlling purpose.88 89 56 - Try to talk to education based distribution coordinators 90 57 (SambaEdu, SkoleLinux, K12LTSP, ...) to see how to … … 100 67 101 68 - Price and statistics per page format. 102 103 - Add a description field to users/groups.104 69 105 70 - Allow the admin to choose an action to take when the database