X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/bde1652c9c4187fb2f212baf2f35696e81d0c08a..487537d3a713e0aa07d262e6d8c4d3b13c5c6748:/webmoira/mit/moira/MoiraServlet.java?ds=sidebyside
diff --git a/webmoira/mit/moira/MoiraServlet.java b/webmoira/mit/moira/MoiraServlet.java
index eeebbe3a..5ad55ef5 100644
--- a/webmoira/mit/moira/MoiraServlet.java
+++ b/webmoira/mit/moira/MoiraServlet.java
@@ -13,9 +13,7 @@ import java.util.ResourceBundle;
public class MoiraServlet extends HttpServlet {
static final String MOIRA_SERVER = "moira.mit.edu";
- Object LOCK = new Object(); // Used to synchronize Moira authentication
- // with the ticket fetching thread
- Kticket kt = new Kticket("jis5", "foobar", "ATHENA.MIT.EDU", LOCK);
+ Kticket kt = new Kticket("jis5", "foobar", "ATHENA.MIT.EDU");
boolean ktinit = false;
private static final int MAXDISPLAY = 10;
Hashtable FileParts = new Hashtable();
@@ -270,12 +268,12 @@ public class MoiraServlet extends HttpServlet {
if (offset < 0) showall = true;
if (members == null) {
- MoiraConnect mc = null;
+ Moira mc = null;
try {
mc = connect();
mc.proxy(kname);
members = mc.get_members_of_list(arg);
- mc.disconnect();
+ mc.done(); // Done will disconnect
mc = null;
if (members != null)
session.putValue("members", members);
@@ -297,7 +295,7 @@ public class MoiraServlet extends HttpServlet {
e.printStackTrace();
}
} finally {
- if (mc != null) mc.disconnect();
+ if (mc != null) mc.done();
}
}
@@ -316,7 +314,7 @@ public class MoiraServlet extends HttpServlet {
}
for (int i = offset; i < len; i++) {
msg += "
" + members[i].getMemberType() + " | ";
- msg += "" + members[i].getMemberId() + " |
\r\n";
+ msg += "" + quote(members[i].getMemberId()) + " | \r\n";
}
msg += " | \r\n";
if ((offset > 0) && !showall) {
@@ -401,7 +399,7 @@ public class MoiraServlet extends HttpServlet {
HttpSession session = request.getSession(true);
- MoiraConnect mc = null;
+ Moira mc = null;
ListInfo li = null;
try {
mc = connect();
@@ -418,11 +416,7 @@ public class MoiraServlet extends HttpServlet {
msg += "!>\r\n";
return (msg);
} finally {
- try {
- if (mc != null) mc.disconnect();
- mc = null;
- } catch (Exception e) {
- }
+ if (mc != null) mc.done();
}
String list_description = "";
@@ -451,7 +445,7 @@ public class MoiraServlet extends HttpServlet {
HttpSession session = request.getSession(true);
- MoiraConnect mc = null;
+ Moira mc = null;
boolean found = false;
boolean sublists = false;
Member [] members = null;
@@ -471,8 +465,6 @@ public class MoiraServlet extends HttpServlet {
}
}
}
- mc.disconnect();
- mc = null;
} catch (MoiraException m) {
try {
msg = "\r\n";
@@ -490,7 +482,7 @@ public class MoiraServlet extends HttpServlet {
e.printStackTrace();
}
} finally {
- if (mc != null) mc.disconnect();
+ if (mc != null) mc.done();
}
msg = "You are " + (found ? "" : "not ") + "a member of the list " + arg + ".
\r\n";
if (!found && sublists)
@@ -523,7 +515,7 @@ public class MoiraServlet extends HttpServlet {
if (listname == null) {
return("
Could not find list name (shouldn't happen).
");
}
- MoiraConnect mc = null;
+ Moira mc = null;
try {
mc = connect();
mc.proxy(kname);
@@ -543,10 +535,7 @@ public class MoiraServlet extends HttpServlet {
msg += "!>\r\n";
return (msg);
} finally {
- try {
- if (mc != null) mc.disconnect();
- } catch (Exception e) {
- }
+ if (mc != null) mc.done();
}
if (add) msg = "You have been added to the " + listname + " list.";
else msg = "You have been removed from the " + listname + " list.";
@@ -566,7 +555,7 @@ public class MoiraServlet extends HttpServlet {
HttpSession session = request.getSession(true);
- MoiraConnect mc = null;
+ Moira mc = null;
try {
mc = connect();
mc.proxy(kname);
@@ -578,7 +567,7 @@ public class MoiraServlet extends HttpServlet {
for (int i = 0; i < members.length; i++) {
del[i] = new Delmember(members[i]);
}
- mc.disconnect();
+ mc.done();
mc = null;
session.putValue("list", arg);
session.removeValue("members"); // In case left over from previous call
@@ -598,8 +587,9 @@ public class MoiraServlet extends HttpServlet {
} catch (Exception e) {
e.printStackTrace();
}
+ return(msg);
} finally {
- if (mc != null) mc.disconnect();
+ if (mc != null) mc.done();
}
return (do_remdisplay(qv, request, response, del, 0));
}
@@ -627,7 +617,7 @@ public class MoiraServlet extends HttpServlet {
msg += "
| " + del[i].member.getMemberType() + " | ";
- msg += "" + del[i].member.getMemberId() + " |
\r\n";
+ msg += "" + quote(del[i].member.getMemberId()) + " | \r\n";
}
msg += "\r\n";
msg += " | \r\n";
@@ -728,7 +718,7 @@ public class MoiraServlet extends HttpServlet {
for (int i = 0; i < del.length; i++) {
if (del[i].marked) {
msg += "" + del[i].member.getMemberType() + " | ";
- msg += "" + del[i].member.getMemberId() + " |
\r\n";
+ msg += "" + quote(del[i].member.getMemberId()) + " | \r\n";
}
}
msg += "\r\n";
@@ -760,7 +750,7 @@ public class MoiraServlet extends HttpServlet {
Vector problems = new Vector();
Vector success = new Vector();
- MoiraConnect mc = null;
+ Moira mc = null;
try {
mc = connect();
mc.proxy(kname);
@@ -771,7 +761,7 @@ public class MoiraServlet extends HttpServlet {
success.addElement(del[i].member);
}
} catch (MoiraException m) {
- problems.addElement("" + del[i].member.getMemberId() + " | " + m.getMessage() + " |
\r\n");
+ problems.addElement("" + quote(del[i].member.getMemberId()) + " | " + m.getMessage() + " |
\r\n");
}
}
} catch (MoiraException m) {
@@ -785,10 +775,7 @@ public class MoiraServlet extends HttpServlet {
msg += "!>\r\n";
return (msg);
} finally {
- try {
- if (mc != null) mc.disconnect();
- } catch (Exception e) {
- }
+ if (mc != null) mc.done();
}
msg = "";
@@ -796,7 +783,7 @@ public class MoiraServlet extends HttpServlet {
msg += "Deleted the following:
\r\n";
msg += "\r\n";
for (int i = 0; i < success.size(); i++) {
- msg += "" + ((Member)success.elementAt(i)).getMemberId() + " |
\r\n";
+ msg += "" + quote(((Member)success.elementAt(i)).getMemberId()) + " |
\r\n";
}
msg += "
\r\n";
}
@@ -825,7 +812,7 @@ public class MoiraServlet extends HttpServlet {
HttpSession session = request.getSession(true);
String msg = "";
- MoiraConnect mc = null;
+ Moira mc = null;
ListInfo li = null;
try {
mc = connect();
@@ -842,10 +829,7 @@ public class MoiraServlet extends HttpServlet {
msg += "!>\r\n";
return (msg);
} finally {
- try {
- if (mc != null) mc.disconnect();
- } catch (Exception e) {
- }
+ if (mc != null) mc.done();
}
if (li == null) {
return("Did not find list info.");
@@ -875,7 +859,7 @@ public class MoiraServlet extends HttpServlet {
HttpSession session = request.getSession(true);
String msg = "";
- MoiraConnect mc = null;
+ Moira mc = null;
ListInfo li = null;
try {
mc = connect();
@@ -892,10 +876,7 @@ public class MoiraServlet extends HttpServlet {
msg += "!>\r\n";
return (msg);
} finally {
- try {
- if (mc != null) mc.disconnect();
- } catch (Exception e) {
- }
+ if (mc != null) mc.done();
}
if (li == null) {
return("Did not find list info.");
@@ -968,13 +949,11 @@ public class MoiraServlet extends HttpServlet {
if (tmp != null)
li.ace_name = tmp;
- MoiraConnect mc = null;
+ Moira mc = null;
try {
mc = connect();
mc.proxy(kname);
mc.update_list_info(li.name, li);
- mc.disconnect();
- mc = null;
} catch (MoiraException e) {
String msg;
if (e.getMessage().startsWith("No such list")) {
@@ -994,10 +973,7 @@ public class MoiraServlet extends HttpServlet {
msg += "!>\r\n";
return (msg);
} finally {
- try {
- if (mc != null) mc.disconnect();
- } catch (Exception e) {
- }
+ if (mc != null) mc.done();
}
String msg = "Update of " + li.name + " succeeded\r\n";
qv.put("list", li.name);
@@ -1023,7 +999,7 @@ public class MoiraServlet extends HttpServlet {
if (member == null || type == null || member.equals("")) {
return("
No names selected to be added!
");
}
- MoiraConnect mc = null;
+ Moira mc = null;
StreamTokenizer tk = null;
msg += "\r\n";
boolean addheader = false;
@@ -1033,6 +1009,8 @@ public class MoiraServlet extends HttpServlet {
mc = connect();
mc.proxy(kname);
tk = new StreamTokenizer(new StringReader(member));
+ mc.done();
+ mc = null;
tk.wordChars('@', '@');
tk.wordChars('0', '9');
tk.wordChars('_', '_');
@@ -1077,10 +1055,7 @@ public class MoiraServlet extends HttpServlet {
} catch (IOException e) {
e.printStackTrace(); // Shouldn't happen
} finally {
- try {
- if (mc != null) mc.disconnect();
- } catch (Exception e) {
- }
+ if (mc != null) mc.done();
}
if (problems.size() != 0) {
msg += "There were difficulties adding the following users:
\r\n";
@@ -1294,39 +1269,51 @@ public class MoiraServlet extends HttpServlet {
* @return A Moira Connection Object
* @exception MoiraException on any error
*/
- protected MoiraConnect connect() throws MoiraException {
- MoiraConnect retval = null;
+ protected Moira connect() throws MoiraException {
+ Moira retval = null;
+ boolean error = true;
int count = 0;
- while (count++ < 10) { // Got to stop at some point!
- retval = new MoiraConnect(MOIRA_SERVER, LOCK);
- retval.connect();
- try {
- retval.auth();
- return (retval); // No exception, return. yeah!
- } catch (MoiraException m) {
- if ((m.getCode() != KE_RD_AP_BADD) || (count > 8)) {
- if (retval != null) {
- try {
- retval.disconnect();
- } catch (Exception e) {
- }
+ try {
+ while (count++ < 10) { // Got to stop at some point!
+ retval = Moira.getInstance(MOIRA_SERVER);
+ retval.connect();
+ try {
+ retval.auth();
+ error = false;
+ return (retval); // No exception, return. yeah!
+ } catch (MoiraException m) {
+ if ((m.getCode() != KE_RD_AP_BADD) || (count > 8)) {
+ throw m; // Re-throw if not the error we expect or we are looping
}
- throw m; // Re-throw if not the error we expect or we are looping
}
- }
- if (retval != null) {
- try {
- retval.disconnect();
- } catch (Exception e) {
+ if (retval != null) {
+ retval.done();
+ retval = null;
}
- retval = null;
+ System.err.println("MoiraServlet: Forced Renewal...");
+ kt.renew(); // Renew tickets
}
- System.err.println("MoiraServlet: Forced Renewal...");
- kt.renew(); // Renew tickets
+ // Fell through, count exceeded
+ throw new MoiraException("Cannot authenticate successfully to Moira");
+ } finally {
+ if (error && (retval != null)) retval.done();
}
- return (null);
}
+ public static String quote(String value) {
+ if (value.indexOf('<') == -1 &&
+ value.indexOf('>') == -1) return (value); // Nothing to quote
+ StringBuffer buf = new StringBuffer(value.length() + 10);
+ for (int i = 0; i < value.length(); i++) {
+ char c = value.charAt(i);
+ if (c != '<' && c != '>') buf.append(c);
+ else {
+ if (c == '<') buf.append("<");
+ if (c == '>') buf.append(">");
+ }
+ }
+ return (new String(buf));
+ }
}
class Delmember {