+void yf::AuthSimple::process_scan(mp::Package &package) const
+{
+ Z_ScanRequest *req =
+ package.request().get()->u.z3950->u.scanRequest;
+
+ if (m_p->userBySession.count(package.session()) == 0) {
+ // It's a non-authenticated session, so just accept the operation
+ return package.move();
+ }
+
+ std::string user = m_p->userBySession[package.session()];
+ yf::AuthSimple::Rep::PasswordAndDBs pdb = m_p->userRegister[user];
+ for (int i = 0; i < req->num_databaseNames; i++) {
+ if (!contains(pdb.dbs, req->databaseNames[i]) &&
+ !contains(pdb.dbs, "*")) {
+ // Make an Scan rejection APDU
+ mp::odr odr;
+ Z_APDU *apdu = odr.create_scanResponse(
+ package.request().get()->u.z3950,
+ YAZ_BIB1_ACCESS_TO_SPECIFIED_DATABASE_DENIED,
+ req->databaseNames[i]);
+ package.response() = apdu;
+ package.session().close();
+ return;
+ }
+ }
+
+ // All the requested databases are acceptable
+ return package.move();
+}
+
+
+static void reject_init(mp::Package &package, int err, const char *addinfo) {
+ if (err == 0)
+ err = YAZ_BIB1_INIT_AC_AUTHENTICATION_SYSTEM_ERROR;