- client: change the handling of account manager replies:

Old:
        If the AM sends us a project we're already attached to,
        and the authenticator is different,
        print an error message and don't change anything.
    Problem:
        If the AM is using weak authenticators,
        and the user has changed their password,
        the weak authenticator changes.
        In this case the AM will send the new weak auth,
        the client will ignore it,
        and all subsequent scheduler RPCs will fail
        until the user removes/adds the project.
    Solution:
        If the AM sends us a new auth for a project, use it.
    Note:
        From the time the password is changed on the project
        to the next AM RPC,
        the client will have a bad weak auth and scheduler RPCs will fail.
        That's OK.

client/
    acct_mgr.cpp

svn path=/trunk/boinc/; revision=23479
This commit is contained in:
David Anderson 2011-04-28 22:10:23 +00:00
parent 382905661f
commit 8757e07f4f
5 changed files with 109 additions and 81 deletions

View File

@ -2316,10 +2316,10 @@ David 18 Apr 2011
cs_scheduler.cpp
David 18 Apr 2011
- client: fix message describing work request
- client: fix message describing work request
client/
scheduler_op.cpp
client/
scheduler_op.cpp
Rom 19 Apr 2011
- MGR: Adjust the width of the various tabs in advanced view if the notice text
@ -2466,15 +2466,15 @@ David 24 Apr 2011
acct_mgr.cpp
David 24 Apr 2011
- client: show error messages from account managers correctly
- client/manager: if a job is missing a GPU, show details
- client: win compile fix
client/
- client: show error messages from account managers correctly
- client/manager: if a job is missing a GPU, show details
- client: win compile fix
client/
acct_mgr.cpp
client_msgs.cpp,h
client_types.cpp
sysmon_win.cpp
client_msgs.cpp,h
client_types.cpp
sysmon_win.cpp
David 24 Apr 2011
- client: simplify the semantics of sticky files:
@ -2551,10 +2551,10 @@ David 26 Apr 2011
app_control.cpp
David 26 Apr 2011
- web: fix infinite recursion when project is down
- web: fix infinite recursion when project is down
html/inc/
util.inc
html/inc/
util.inc
Rom 26 Apr 2011
- VBOX: Begin merging the two different vbox wrappers (COM vs. Daniel's from
@ -2574,10 +2574,10 @@ Rom 26 Apr 2011
vboxwrapper.vcproj
David 26 Apr 2011
- web: eliminate double calls to page_head()
- web: eliminate double calls to page_head()
html/inc/
util.inc
html/inc/
util.inc
David 26 Apr 2011
- web: fix bug that cause "use signature" preference to be ignored
@ -2620,12 +2620,37 @@ Charlie 28 Apr 2011
sg_BoincSimpleFrame
David 28 Apr 2011
- client: fix bug that prevented work fetch in some cases
- client: fix bug that prevented work fetch in some cases
client/
client_state.cpp
main.cpp
work_fetch.cpp
lib/
coproc.h
hostinfo.cpp
client/
client_state.cpp
main.cpp
work_fetch.cpp
lib/
coproc.h
hostinfo.cpp
David 28 Apr 2011
- client: change the handling of account manager replies:
Old:
If the AM sends us a project we're already attached to,
and the authenticator is different,
print an error message and don't change anything.
Problem:
If the AM is using weak authenticators,
and the user has changed their password,
the weak authenticator changes.
In this case the AM will send the new weak auth,
the client will ignore it,
and all subsequent scheduler RPCs will fail
until the user removes/adds the project.
Solution:
If the AM sends us a new auth for a project, use it.
Note:
From the time the password is changed on the project
to the next AM RPC,
the client will have a bad weak auth and scheduler RPCs will fail.
That's OK.
client/
acct_mgr.cpp

View File

@ -505,65 +505,66 @@ void ACCT_MGR_OP::handle_reply(int http_op_retval) {
// BAM! leaves authenticator blank if our request message
// had the current account info
//
if (acct.authenticator.size() && strcmp(pp->authenticator, acct.authenticator.c_str())) {
msg_printf(pp, MSG_INFO,
"Already attached under another account"
);
if (acct.authenticator.size()) {
if (strcmp(pp->authenticator, acct.authenticator.c_str())) {
strcpy(pp->authenticator, acct.authenticator.c_str());
msg_printf(pp, MSG_INFO,
"Received new authenticator from account manager"
);
}
}
pp->attached_via_acct_mgr = true;
if (acct.dont_request_more_work.present) {
pp->dont_request_more_work = acct.dont_request_more_work.value;
}
if (acct.detach_when_done.present) {
pp->detach_when_done = acct.detach_when_done.value;
if (pp->detach_when_done) {
pp->dont_request_more_work = true;
}
}
// initiate a scheduler RPC if requested by AMS
//
if (acct.update) {
pp->sched_rpc_pending = RPC_REASON_ACCT_MGR_REQ;
pp->min_rpc_time = 0;
}
if (acct.resource_share.present) {
pp->ams_resource_share = acct.resource_share.value;
pp->resource_share = pp->ams_resource_share;
} else {
//msg_printf(pp, MSG_INFO, "Already attached");
pp->attached_via_acct_mgr = true;
if (acct.dont_request_more_work.present) {
pp->dont_request_more_work = acct.dont_request_more_work.value;
}
if (acct.detach_when_done.present) {
pp->detach_when_done = acct.detach_when_done.value;
if (pp->detach_when_done) {
pp->dont_request_more_work = true;
}
}
// initiate a scheduler RPC if requested by AMS
// no host-specific resource share;
// if currently have one, restore to value from web
//
if (acct.update) {
pp->sched_rpc_pending = RPC_REASON_ACCT_MGR_REQ;
pp->min_rpc_time = 0;
}
if (acct.resource_share.present) {
pp->ams_resource_share = acct.resource_share.value;
pp->resource_share = pp->ams_resource_share;
} else {
// no host-specific resource share;
// if currently have one, restore to value from web
//
if (pp->ams_resource_share >= 0) {
pp->ams_resource_share = -1;
PROJECT p2;
strcpy(p2.master_url, pp->master_url);
retval = p2.parse_account_file();
if (!retval) {
pp->resource_share = p2.resource_share;
} else {
pp->resource_share = 100;
}
}
}
if (acct.suspend.present) {
if (acct.suspend.value) {
pp->suspend();
if (pp->ams_resource_share >= 0) {
pp->ams_resource_share = -1;
PROJECT p2;
strcpy(p2.master_url, pp->master_url);
retval = p2.parse_account_file();
if (!retval) {
pp->resource_share = p2.resource_share;
} else {
pp->resume();
pp->resource_share = 100;
}
}
if (acct.abort_not_started.present) {
if (acct.abort_not_started.value) {
pp->abort_not_started();
}
}
if (acct.suspend.present) {
if (acct.suspend.value) {
pp->suspend();
} else {
pp->resume();
}
for (int i=0; i<MAX_RSC; i++) {
pp->no_rsc_ams[i] = acct.no_rsc[i];
}
if (acct.abort_not_started.present) {
if (acct.abort_not_started.value) {
pp->abort_not_started();
}
}
for (int i=0; i<MAX_RSC; i++) {
pp->no_rsc_ams[i] = acct.no_rsc[i];
}
}
} else {
// here we don't already have the project.

View File

@ -1225,10 +1225,12 @@ static inline bool get_fractional_assignment(
return true;
}
}
msg_printf(rp->project, MSG_INFO,
"[coproc] Insufficient %s for %s: need %f",
cp->type, rp->name, usage
);
if (log_flags.coproc_debug) {
msg_printf(rp->project, MSG_INFO,
"[coproc] Insufficient %s for %s: need %f",
cp->type, rp->name, usage
);
}
return false;
}

View File

@ -27,6 +27,7 @@ require_once("../inc/profile.inc");
// don't allow /... at the end of URL
if (array_key_exists("PATH_INFO", $_SERVER)) {
print_r($_SERVER);
die("bad URL");
}

View File

@ -210,7 +210,6 @@ const char* SCHEDULER_REQUEST::parse(FILE* fin) {
client_cap_plan_class = false;
sandbox = -1;
allow_multiple_clients = -1;
coprocs.clear();
// TODO: use XML_PARSER FOR THIS