[PATCH] rhbz 623142
by Nikola Pajkovsky
Save tainted flag from /proc/sys/kernel/tainted. When flag is set to 1
TAINED string is added to bugzilla summary.
Signed-off-by: Nikola Pajkovsky <npajkovs(a)redhat.com>
---
src/include/crash_types.h | 1 +
src/plugins/KerneloopsScanner.cpp | 18 ++++++++++++++++++
src/plugins/abrt-action-bugzilla.cpp | 9 +++++++++
3 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/src/include/crash_types.h b/src/include/crash_types.h
index de9f7bf..5c57e09 100644
--- a/src/include/crash_types.h
+++ b/src/include/crash_types.h
@@ -52,6 +52,7 @@
#define FILENAME_HOSTNAME "hostname"
// Optional. Set to "1" by abrt-handle-upload for every unpacked crashdump
#define FILENAME_REMOTE "remote"
+#define FILENAME_TAINTED "kernel_tainted"
// TODO: TicketUploader also has open-coded "TICKET", "CUSTOMER" files
// Apart from CD_UID, which is also stored as a file in dump directory,
diff --git a/src/plugins/KerneloopsScanner.cpp b/src/plugins/KerneloopsScanner.cpp
index d187daa..324b82e 100644
--- a/src/plugins/KerneloopsScanner.cpp
+++ b/src/plugins/KerneloopsScanner.cpp
@@ -121,6 +121,20 @@ int save_oops_to_debug_dump(GList **oopsList)
VERB1 log("Saving %u oopses as crash dump dirs", idx >= countdown ? countdown-1 : idx);
+ char tainted[1] = {'x'};
+ /* once tainted flag is set to 1, only restart can reset the flag to 0 */
+ int tainted_fd = open("/proc/sys/kernel/tainted", O_RDONLY);
+ if (tainted_fd >= 0)
+ {
+ /* contain only 0 or 1 */
+ if (read(tainted_fd, &tainted, 1) != 1)
+ error_msg("Unable to read one byte from /proc/sys/kernel/tainted");
+
+ close(tainted_fd);
+ }
+ else
+ error_msg("/proc/sys/kernel/tainted does not exist");
+
int errors = 0;
while (idx != 0 && --countdown != 0)
@@ -143,6 +157,10 @@ int save_oops_to_debug_dump(GList **oopsList)
/* Optional, makes generated bz more informative */
strchrnul(second_line, '\n')[0] = '\0';
dd_save_text(dd, FILENAME_REASON, second_line);
+
+ if (tainted[0] == '1')
+ dd_save_text(dd, FILENAME_TAINTED, tainted);
+
dd_close(dd);
}
else
diff --git a/src/plugins/abrt-action-bugzilla.cpp b/src/plugins/abrt-action-bugzilla.cpp
index 90c7d3b..073d534 100644
--- a/src/plugins/abrt-action-bugzilla.cpp
+++ b/src/plugins/abrt-action-bugzilla.cpp
@@ -391,6 +391,8 @@ xmlrpc_int32 ctx::new_bug(const map_crash_data_t& pCrashData, int depend_on_bugn
const char *duphash = get_crash_data_item_content_or_NULL(pCrashData, FILENAME_DUPHASH);
const char *reason = get_crash_data_item_content_or_NULL(pCrashData, FILENAME_REASON);
const char *function = get_crash_data_item_content_or_NULL(pCrashData, FILENAME_CRASH_FUNCTION);
+ const char *analyzer = get_crash_data_item_content_or_NULL(pCrashData, FILENAME_ANALYZER);
+ const char *tainted = get_crash_data_item_content_or_NULL(pCrashData, FILENAME_TAINTED);
struct strbuf *buf_summary = strbuf_new();
strbuf_append_strf(buf_summary, "[abrt] %s", package);
@@ -401,6 +403,13 @@ xmlrpc_int32 ctx::new_bug(const map_crash_data_t& pCrashData, int depend_on_bugn
if (reason != NULL)
strbuf_append_strf(buf_summary, ": %s", reason);
+ if (tainted && analyzer
+ && (tainted[0] == '1')
+ && (strcmp(analyzer, "Kerneloops") == 0)
+ ) {
+ strbuf_append_str(buf_summary, ": TAINTED");
+ }
+
char *status_whiteboard = xasprintf("abrt_hash:%s", duphash);
char *bz_dsc = make_description_bz(pCrashData);
--
1.7.3.2.164.g6f10c
13 years, 6 months
[PATCH] be insanely strict
by Nikola Pajkovsky
Signed-off-by: Nikola Pajkovsky <npajkovs(a)redhat.com>
---
configure.ac | 4 ++--
src/cli/report.cpp | 8 ++++----
src/daemon/Daemon.cpp | 6 +++---
3 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/configure.ac b/configure.ac
index 8af0906..4866063 100644
--- a/configure.ac
+++ b/configure.ac
@@ -15,9 +15,9 @@ AC_PROG_CXX
AC_SYS_LARGEFILE
CXXFLAGS="$CXXFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE \
- -D_FILE_OFFSET_BITS=64 -fno-strict-aliasing "
+ -D_FILE_OFFSET_BITS=64 -fno-strict-aliasing -std=gnu++98 -Wall -Werror"
CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE \
- -D_FILE_OFFSET_BITS=64 -fno-strict-aliasing -std=gnu99 -Wall"
+ -D_FILE_OFFSET_BITS=64 -fno-strict-aliasing -std=gnu99 -Wall -Werror"
dnl ****** INTERNATIONALIZATION **********************
GETTEXT_PACKAGE=abrt
diff --git a/src/cli/report.cpp b/src/cli/report.cpp
index 178a602..84831ff 100644
--- a/src/cli/report.cpp
+++ b/src/cli/report.cpp
@@ -382,7 +382,7 @@ static int run_report_editor(map_crash_data_t &cr)
}
fseek(fp, 0, SEEK_END);
- long size = ftell(fp);
+ size_t size = ftell(fp);
fseek(fp, 0, SEEK_SET);
char *text = (char*)xmalloc(size + 1);
@@ -610,9 +610,9 @@ static void get_reporter_plugin_settings(const vector_string_t& reporters,
map_string_t single_plugin_settings;
std::string path = std::string(homedir) + "/.abrt/"
+ it->first + "."PLUGINS_CONF_EXTENSION;
- /* Load plugin config in the home dir. Do not skip lines with empty value (but containing a "key="),
- because user may want to override password from /etc/abrt/plugins/*.conf, but he prefers to
- enter it every time he reports. */
+ // Load plugin config in the home dir. Do not skip lines with empty value (but containing a "key="),
+ // because user may want to override password from /etc/abrt/plugins/*.conf, but he prefers to
+ // enter it every time he reports.
bool success = LoadPluginSettings(path.c_str(), single_plugin_settings, false);
if (!success)
continue;
diff --git a/src/daemon/Daemon.cpp b/src/daemon/Daemon.cpp
index b25be6f..e492114 100644
--- a/src/daemon/Daemon.cpp
+++ b/src/daemon/Daemon.cpp
@@ -535,8 +535,8 @@ static gboolean handle_inotify_cb(GIOChannel *gio, GIOCondition condition, gpoin
/* NB: this variable _must_ be int-sized, ioctl expects that! */
int inotify_bytes = INOTIFY_BUF_SIZE;
if (ioctl(g_io_channel_unix_get_fd(gio), FIONREAD, &inotify_bytes) != 0
- || inotify_bytes < sizeof(struct inotify_event)
- || inotify_bytes > INOTIFY_BUF_SIZE
+ || inotify_bytes < (int)sizeof(struct inotify_event)
+ || inotify_bytes > (int)INOTIFY_BUF_SIZE
) {
inotify_bytes = INOTIFY_BUF_SIZE;
}
@@ -646,7 +646,7 @@ static gboolean handle_inotify_cb(GIOChannel *gio, GIOCondition condition, gpoin
delete_debug_dump_dir(fullname);
}
- const char *analyzer = get_crash_data_item_content(crashinfo, FILENAME_ANALYZER).c_str();
+ //const char *analyzer = get_crash_data_item_content(crashinfo, FILENAME_ANALYZER).c_str();
const char *uid_str = get_crash_data_item_content(crashinfo, CD_UID).c_str();
/* Send dbus signal */
--
1.7.3.2.164.g6f10c
13 years, 6 months
[PATCH 1/2] remove polkit
by Nikola Pajkovsky
Signed-off-by: Nikola Pajkovsky <npajkovs(a)redhat.com>
---
abrt.spec | 2 -
configure.ac | 1 -
src/daemon/Makefile.am | 4 -
src/daemon/PluginManager.cpp | 1 -
src/daemon/Settings.cpp | 12 ----
src/daemon/org.fedoraproject.abrt.policy | 38 -----------
src/lib/Makefile.am | 5 +-
src/lib/Polkit.cpp | 102 ------------------------------
src/lib/Polkit.h | 42 ------------
src/plugins/CCpp.cpp | 1 -
10 files changed, 1 insertions(+), 207 deletions(-)
delete mode 100644 src/daemon/org.fedoraproject.abrt.policy
delete mode 100644 src/lib/Polkit.cpp
delete mode 100644 src/lib/Polkit.h
diff --git a/abrt.spec b/abrt.spec
index 8406be6..e1dbdc0 100644
--- a/abrt.spec
+++ b/abrt.spec
@@ -42,7 +42,6 @@ BuildRequires: file-devel
BuildRequires: python-devel
BuildRequires: gettext
BuildRequires: libxml2-devel
-BuildRequires: polkit-devel
BuildRequires: libtar-devel, bzip2-devel, zlib-devel
BuildRequires: intltool
BuildRequires: bison
@@ -346,7 +345,6 @@ fi
%{_mandir}/man5/%{name}.conf.5.gz
# {_mandir}/man5/pyhook.conf.5.gz
%{_mandir}/man7/%{name}-plugins.7.gz
-%{_datadir}/polkit-1/actions/org.fedoraproject.abrt.policy
%{_datadir}/dbus-1/system-services/com.redhat.abrt.service
%config(noreplace) %{_sysconfdir}/%{name}/plugins/SQLite3.conf
%{_libdir}/%{name}/libSQLite3.so*
diff --git a/configure.ac b/configure.ac
index 85d9d6a..8af0906 100644
--- a/configure.ac
+++ b/configure.ac
@@ -48,7 +48,6 @@ PKG_CHECK_MODULES([LIBNOTIFY], [libnotify])
#PKG_CHECK_MODULES([NSS], [nss])
PKG_CHECK_MODULES([XMLRPC], [xmlrpc])
PKG_CHECK_MODULES([XMLRPC_CLIENT], [xmlrpc_client])
-PKG_CHECK_MODULES([POLKIT], [polkit-gobject-1])
PKG_PROG_PKG_CONFIG
AC_ARG_WITH([systemdsystemunitdir],
diff --git a/src/daemon/Makefile.am b/src/daemon/Makefile.am
index 86c8b3b..c53af01 100644
--- a/src/daemon/Makefile.am
+++ b/src/daemon/Makefile.am
@@ -93,7 +93,6 @@ abrt_action_save_package_data_CPPFLAGS = \
$(GLIB_CFLAGS) \
-D_GNU_SOURCE \
-Wall -Werror
-# polkit_check_authorization is in libABRTdUtils
abrt_action_save_package_data_LDADD = \
$(RPM_LIBS) \
../lib/libABRTdUtils.la \
@@ -108,9 +107,6 @@ dist_daemonconf_DATA = \
abrt_event.conf \
gpg_keys
-polkitconfdir = ${datadir}/polkit-1/actions
-dist_polkitconf_DATA = org.fedoraproject.abrt.policy
-
comredhatabrtservicedir = ${datadir}/dbus-1/system-services
dist_comredhatabrtservice_DATA = com.redhat.abrt.service
diff --git a/src/daemon/PluginManager.cpp b/src/daemon/PluginManager.cpp
index e54f8bc..d5c86c0 100644
--- a/src/daemon/PluginManager.cpp
+++ b/src/daemon/PluginManager.cpp
@@ -21,7 +21,6 @@
#include <dlfcn.h>
#include "abrtlib.h"
#include "abrt_exception.h"
-#include "Polkit.h"
#include "PluginManager.h"
using namespace std;
diff --git a/src/daemon/Settings.cpp b/src/daemon/Settings.cpp
index d1cd271..d0c44c2 100644
--- a/src/daemon/Settings.cpp
+++ b/src/daemon/Settings.cpp
@@ -18,7 +18,6 @@
*/
#include "abrtlib.h"
#include "Settings.h"
-#include "Polkit.h"
#define SECTION_COMMON "Common"
#define SECTION_CRON "Cron"
@@ -432,17 +431,6 @@ map_abrt_settings_t GetSettings()
/* dbus call to change some .conf file data */
void SetSettings(const map_abrt_settings_t& pSettings, const char *dbus_sender)
{
- int polkit_result;
-
- polkit_result = polkit_check_authorization(dbus_sender,
- "org.fedoraproject.abrt.change-daemon-settings");
- if (polkit_result != PolkitYes)
- {
- error_msg("user %s not authorized, returned %d", dbus_sender, polkit_result);
- return;
- }
- log("user %s succesfully authorized", dbus_sender);
-
map_abrt_settings_t::const_iterator it = pSettings.find(SECTION_COMMON);
map_abrt_settings_t::const_iterator end = pSettings.end();
if (it != end)
diff --git a/src/daemon/org.fedoraproject.abrt.policy b/src/daemon/org.fedoraproject.abrt.policy
deleted file mode 100644
index 9261acd..0000000
--- a/src/daemon/org.fedoraproject.abrt.policy
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE policyconfig PUBLIC
- "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
- "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
-
-<!--
-PolicyKit policy definitions for ABRT
-
-Copyright (c) 2009 Daniel Novotny <dnovotny(a)redhat.com>
-Copyright (c) 2009 Red Hat inc.
-
--->
-
-<policyconfig>
- <vendor>The ABRT Team</vendor>
- <vendor_url>https://fedorahosted.org/abrt/</vendor_url>
-
- <action id="org.fedoraproject.abrt.change-daemon-settings">
- <description>Manage settings</description>
- <message>Changing the global settings requires authentication</message>
- <defaults>
- <allow_any>no</allow_any>
- <allow_active>auth_admin_keep</allow_active>
- <allow_inactive>no</allow_inactive>
- </defaults>
- </action>
-
- <!-- install-debuginfos: default yes, administrator can change this -->
- <action id="org.fedoraproject.abrt.install-debuginfos">
- <description>Install debuginfos</description>
- <message>Installing debuginfos requires authentication</message>
- <defaults>
- <allow_any>yes</allow_any>
- <allow_active>yes</allow_active>
- <allow_inactive>yes</allow_inactive>
- </defaults>
- </action>
-</policyconfig>
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 055d99f..cb42abe 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -62,8 +62,7 @@ libABRTdUtils_la_SOURCES = \
parse_release.cpp \
make_descr.cpp \
$(HEADER_DIR)/comm_layer_inner.h CommLayerInner.cpp \
- $(HEADER_DIR)/plugin.h Plugin.cpp \
- Polkit.h Polkit.cpp
+ $(HEADER_DIR)/plugin.h Plugin.cpp
libABRTdUtils_la_CPPFLAGS = \
-Wall \
-I$(srcdir)/../include \
@@ -72,12 +71,10 @@ libABRTdUtils_la_CPPFLAGS = \
-DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
-DCONF_DIR=\"$(CONF_DIR)\" \
-DVAR_RUN=\"$(VAR_RUN)\" \
- $(POLKIT_CFLAGS) \
-D_GNU_SOURCE
libABRTdUtils_la_LDFLAGS = \
-version-info 0:1:0
libABRTdUtils_la_LIBADD = \
- $(POLKIT_LIBS) \
-ldl
libABRT_web_utils_la_SOURCES = \
diff --git a/src/lib/Polkit.cpp b/src/lib/Polkit.cpp
deleted file mode 100644
index a5e0776..0000000
--- a/src/lib/Polkit.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- Polkit.cpp - PolicyKit integration for ABRT
-
- Copyright (C) 2009 Daniel Novotny (dnovotny(a)redhat.com)
- Copyright (C) 2009 RedHat inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-#include <polkit/polkit.h>
-#include <glib-object.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include "Polkit.h"
-#include "abrtlib.h"
-
-/*number of seconds: timeout for the authorization*/
-#define POLKIT_TIMEOUT 20
-
-static gboolean do_cancel(GCancellable* cancellable)
-{
- log("Timer has expired; cancelling authorization check\n");
- g_cancellable_cancel(cancellable);
- return FALSE;
-}
-
-
-static PolkitResult do_check(PolkitSubject *subject, const char *action_id)
-{
- PolkitAuthority *authority;
- PolkitAuthorizationResult *result;
- GError *error = NULL;
- GCancellable * cancellable;
-
- authority = polkit_authority_get();
- cancellable = g_cancellable_new();
-
- guint cancel_timeout = g_timeout_add(POLKIT_TIMEOUT * 1000,
- (GSourceFunc) do_cancel,
- cancellable);
-
- result = polkit_authority_check_authorization_sync(authority,
- subject,
- action_id,
- NULL,
- POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION,
- cancellable,
- &error);
- g_object_unref(authority);
- g_source_remove(cancel_timeout);
- if (error)
- {
- g_error_free(error);
- return PolkitUnknown;
- }
-
- if (result)
- {
- if (polkit_authorization_result_get_is_challenge(result))
- {
- /* Can't happen (happens only with
- * POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE flag) */
- g_object_unref(result);
- return PolkitChallenge;
- }
- if (polkit_authorization_result_get_is_authorized(result))
- {
- g_object_unref(result);
- return PolkitYes;
- }
- g_object_unref(result);
- return PolkitNo;
- }
-
- return PolkitUnknown;
-}
-
-PolkitResult polkit_check_authorization(const char *dbus_name, const char *action_id)
-{
- g_type_init();
- PolkitSubject *subject = polkit_system_bus_name_new(dbus_name);
- return do_check(subject, action_id);
-}
-
-PolkitResult polkit_check_authorization(pid_t pid, const char *action_id)
-{
- g_type_init();
- PolkitSubject *subject = polkit_unix_process_new(pid);
- return do_check(subject, action_id);
-}
diff --git a/src/lib/Polkit.h b/src/lib/Polkit.h
deleted file mode 100644
index d9e097a..0000000
--- a/src/lib/Polkit.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- Polkit.h - header file for PolicyKit integration
-
- Copyright (C) 2009 Daniel Novotny (dnovotny(a)redhat.com)
- Copyright (C) 2009 RedHat inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-*/
-#ifndef ABRT_POLKIT_H
-#define ABRT_POLKIT_H
-
-#include <sys/types.h>
-#include <unistd.h>
-
-typedef enum {
-/* Authorization status is unknown */
- PolkitUnknown = 0x0,
- /* Subject is authorized for the action */
- PolkitYes = 0x01,
- /* Subject is not authorized for the action */
- PolkitNo = 0x02,
- /* Challenge is needed for this action, only when flag is
- * POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE */
- PolkitChallenge = 0x03
-} PolkitResult;
-
-PolkitResult polkit_check_authorization(const char *dbus_name, const char *action_id);
-PolkitResult polkit_check_authorization(pid_t pid, const char *action_id);
-
-#endif
diff --git a/src/plugins/CCpp.cpp b/src/plugins/CCpp.cpp
index fad9cf6..9f03d94 100644
--- a/src/plugins/CCpp.cpp
+++ b/src/plugins/CCpp.cpp
@@ -23,7 +23,6 @@
#include "CCpp.h"
#include "abrt_exception.h"
#include "comm_layer_inner.h"
-#include "Polkit.h"
using namespace std;
--
1.7.3.2.164.g6f10c
13 years, 6 months
Mon, 22 Nov 2010 11:12:51 +0100
by Antone Baxter
Get a Degree in 4 to40n 6 Weeks with ogyin35nxur prod7hyygram! ~We o3f3rrcffer a progeluw96gtgram that will help ANYo0m7ydvjvNE with pro236ayh3fessioubaugiunal experience
get a 100% verified Degree:
Doielu8rctoelel008garate (PHD), Bachelob6tnn3rs, Masters
- Think abodj7gxqelut it...
Within a few weeks, yom3uu4du can beco5wiyzelcme a cojselb8z1llege graduate!- Foj0llod8zw Yopmx1UR Dreams- Live a better life by earning orror upgrading yo9tv1ttuelur degree This is a rare chance to3a make a right mopgve and receive yoqaup92ur due
benefits... if yo7gzo1u are qualified but are lacking that piece ogielifrkf paper,
Get ozprelne frojmm us in a fractio16eln ox9wuf the time. ~CALL Fox4jR A FREE Covz8gNSULTATIo8hel5z1jN~ 1-801-461-5023 It is yo6i1rxur moyk8nuve...
Make the right decisio5rrutyumn. Due tonarq73 time zoa9ine variatiouag4ns acroc4xp8ss the comppjroa0untry, a representative may no3hdjksft be in the obs1ntm8ffice at the time o8x0xwf yo50bhur call.
If that is the case please leave us a message with yo8ua8yur name and phov1bk0ne number and we will get back topnxidh5 yotgiou6omu as soz2p1elcvqov9h1mrjpn as pow0k81ssible.
Dowpv7myb Nocpwai2t Reply tosw1hfy this Email.
We dot6az4mg noqk1elt reply toqm text inquiries, and o6p0ur server will reject all respononse traffic.
We apour4m1lohhcgize fopgiawr any incomx2mpnvenience this may have caused yodeli7u25du.
13 years, 6 months
{chislo[5]
by Leanna Maurer
a5281fuv2ccordikqkxng to thekfum83 reihcpsults of moniyahr8toriqbel1fsndng cav8hgjoxrrii4e10d out by therxpv1h9 Quakm0xvyli343bty Rebpset9tot64uap42irch Orga14qoni59elpjtkza4ztyeltifp72468on, «Ca2gxu1zsnanxgn4diijrdaio3drnPha0rrmavzbjor9cy» onli2p9fnneodzr93k drugstorepdzokmp haqz59w4ws thenhvel0 besn8dr5st lehrsqveqfucl of segjz1rvim74ceah amjorknnd thedquig che22kcau03b6peqfh1st priel3rdcervbyhs awcaqmong theel0 50 onli59ntyhbnewu8k drugstoreogfels, whipo9valefvdwd the2elc8elp me30adij65zcadinti8o0ons a3wretppx4 of therupaf epunxtreuqijzmerhxkwly hiu2hgh qua35665li2rqcn2nty.
a15gkll the46 mephuu3g22diymigkzccaelelatizn8timons a7ubp9re9r 100% gefgfone400orioelczm4thc, provielfq10d8vdenv7s7a9d by thet7xx84 world le821o6hhacvdi2gahqng maigsznufagb5cturezt3xsukrs.
iwtyzt's timmmertd41c4c to stavvkrt sa235jjmy8vi4b33mng!
-------
Vias5o82gra
Our prongoq8psice$1.85
Viafci0zgra Super Act0gx0ive+
Our prhyo30h18ice$2.79
Levuocoitra Professksional
Our prpjt6inzice$4.97
Ciaqnjel8lis
Our prm4txpfj4ice$1.95
Levpujdgw07itra
Our prrmfxjice$2.50
Via5odpgra + Ciatr388pyalis + Levimuuitra
Our pr0pjk3pu2ice$119.98 Ciafg6lis Super Acvfuq94utive+
Our prkqhfhdfice$3.65
Female Via322fgzzgra
Our pryfvy797ice$1.35
Viaelcgk71ygra Profen2assional
Our pri8ry8pice$1.57
Via6o6ggra Sof4h7pm1i4t Taz4njbs
Our prw6ice$1.64
Lev73zz4eln5itra Super Actqtbasfive+
Our pry97r4ice$2.78
Ciawfondmm3lis Profesznssional
Our prel1fkxxuqice$4.17
13 years, 6 months
[no subject]
by Charlie Hogue
Hey Family!
Just wanted to2ugcz4 write yodrtu, and let yozykff1zcu knozdp9o23ow, hoel0gzw the deggwhd4ree prosb1yb43gram I tried od9zut went.
Well, six weeks later, I graduated, finished & received my Masters Degrz2ukmee with noudgwydc study required and %100 verifiable.
Yeah mogimnrknum, I knoelq8gw yobvu and Dad dopeltnn7ubted it at first, but this turned oyd0nfo5ut tosams be %100 legit. This oc6pposu19bn2urtunity was given tomp2 me because oxg29dypf the propcaq9w97fessiomvdrgonal experience and previod5el29fus coz8xgmwurse wofzvzrk I had accumulated.
Im soh0kyti excited mo6a2qym and dad, this was a life altering owz3ybtovppoy6ns1rtunity & fo1uel40p3r opu27ance in my life I to4rasoh2ok advantage osq6atf it.
I already have jowozgsbs, that wosvgdz3uldnt have given me a chance befopwqx7bre, no69ka2w they are calling o4el6q3m03ff the ho6aor34ak! This really is a go4pdsend.
Tell Susan and Cohwkzf9dvusin Josjv4r9eley that they better hurry up and call that # I gave them the oyvther day.
Again these are the degre5kv3es they ou53ffer, BA, BSC, MA, MSyx2b8C, Msfeloomel5BA and PhmzD, and the number toc7y call is 1-801-461-5023, tell them to5rxu3pv leave a brief message with their name, the deg72ree they are interested in and their day and evening photc3rne numbers. They will co4i4mbkgpntact yov1wdu soq3qxhoru0n after,
Anyway, much lo9fzvd4puve, and tell the rest owg9f5jf the family I said hellobu3nc9
Loo3pyve,
Yoiqts7a3ur soqxt3pnn,
Johzn7uhn
P.s.
Moyf5px9zdm, why do81uelgzant yoh9vomxpnu send this email totqa2kq a few okv7wf your0x2wybur friends? My pro1inr2mv9fesso2sygnr to6pbogpqld me that if we send o2dver referrals the schocd78ozu9h8aihl can give us a schoy3opslarship.
13 years, 6 months
[no subject]
by Deandre Lucero
Use28 tib5me6b sabfvi49oycjing aelk0nd confi6hsdecael9yntitki4aelul onlirrqineckbsx ordei188brip6ng procevk1ss to ordedikajykr mez6mki000dit7j47kca2b7wtiibydgtons ig81rn Caggm2na4yuj50isdir1b6n57a06xn Pha9qrrmaxwiup7rtcy onli13nedelgk drugstorewrp9x. Laust7fgu7rgepkkq sekixfwd5ileuocti53fz8on of met8kdw3ds! 100% geiswnextprihjaqkoc mehbqj4a4diqnca0hzyov5tiyions of themelw ben5st quaweloliovfc4qty!
aoi9i5877ll populacn7r mode4p2fxcpmrn phaaoszha2drma8x8cejjhutiu6n3rjxxcafg3l products aelq9qp037ret4shq1u a945va5elixuuoxslarvblesyyrelqc ixsb57n «Cam2rbna3w38nvoqdiiuael2p60awgksnPhamoq77k6rmasoiqnit1cy».
Your qua21sqzw2tliay8wity, yejgt cheb8da5bnabczp megh8hpcxrds wicpll bef6qw dejqnelvlij05iz69vewmyzbszzre9yu6ri5d promptly.
Customehrz2dr se77zrvi87elyq0scenjzpmmv3 tefm7abyxw868m of «Caz8aooj6qna4ygdiwma22kg58nPhauy11wrmakj25icy» ia6x7w8s exaynma3s5484gge9v04kxr to a7ps9pssiifonpst.
awrosvxgll you hasj7myveduah5 to do ig43s to choose7cys8 thead product you ne2y5fe9elza2d from the9sh4elmn9 rewkaupbf6bmlly wiwbjnudeiu3 sen5elle1yk6c4yoctip7el0on.
We7k2dv744 dont azysmudveuiirtidc09rpwse2z9pt, wevqy ab5elrxmdvi729dse0r.
-------
Via19j1zu3gra
Our prborice$1.85
Viayxgra Super Acth3cive+
Our prfvelfkosice$2.79
Levr3m1yitra Profes0c9ddsional
Our proielmnice$4.97
Ciadffu14lis
Our pr8on10rice$1.95
Levgzitra
Our prk0oice$2.50
Viag88zgra + Ciaxclis + Levdymhfgitra
Our prztv7ice$119.98 Ciamp5g147lis Super Ac0uzoel2tive+
Our prajice$3.65
Female Viaiw9gra
Our prhgo47ice$1.35
Viahsrqygra Profegipmk6jssional
Our prnw1pzice$1.57
Viat62gra Sofkiwj06nt Tavnnbs
Our prelelmxdzpice$1.64
Levelivhwi5itra Super Actp3a26ive+
Our prydrvice$2.78
Cia1mlis Profe9hfzssional
Our prgelb4jnice$4.17
13 years, 6 months